Meine erste Klasse erkennt variable nicht

Ok, was du function machen soll, ich habe ja zunächst geprüft ob beide User auch online sind und da das gegeben ist komme ich in die Nächste prüfung, dort möchte ich, das ja nachdem was in $rechte_status also zeile 4 steht eine andere ausgabe erfolgt. Der wert der darin ist wird zuvor aus einer db geladen, dort kann ein user entscheiden welchen status er da gerne hätte, ich hab ihn jetzt erstmal fest vergeben.

Als Fall, ich ($ich) rufe das script eines anderen ( $anderer) auf dort wird geprüft, ist der andere online und bin ich eingelogged, so komme ich in die function habRecht.

Dort wird dann geprüft welche rechte mir der andere einräumt.

Ich hoffe nun verständlicher ;)
 
Ich habs jetzt zumindest verstanden.
PHP:
<?php
session_start(); 
$_SESSION['onstatus'] = "online"; 
$userstatus2 = 'online'; # hier könnte auch der wert aus der db stehen 
$rechte_status2 = 1; // 1 = jeder 2 = derzeit keine chats 3 = kein zugriff
    
class User 
{ 
        var $online_status;
        var $rechte_status;
         
        public function __construct()
        {
             $this->online_status = $_SESSION['onstatus'];
             $this->rechte_status = $rechte_status2;
        } 

        public function setzOnstatus($var) 
        { 
             $this->online_status = $var; 
        } 
           
        public function zeigOnstatus($user) 
        { 
             if(($this->online_status == $user->online_status)&& ($user->online_status !== 'offline'))
             { 
                  return $this->checkRechte($user);                  
             }
             elseif(($this->online_status == 'offline')&& ($user->online_status !== 'offline'))
             {
                  print "Sie müssen eingelogged sein um mit diesem User jetzt zu chatten.";
             }
             
              else {
                  print "User offline.";
             }
        }

        private function checkRechte($user) 
        {
              if(($this->rechte_status == $user->rechte_status)&&($this->rechte_status == 1)) {
                  return "Du kannst mit deinem Gegenüber chatten";    
              }
              elseif(($this->rechte_status == $user->rechte_status)&&($this->rechte_status == 2)) {
                  return "Der andere möchte derzeit keine Chats";    
              }
              elseif(($this->rechte_status == $user->rechte_status)&&($this->rechte_status == 3)) {
                  return "Du hast kein Recht zu chatten";    
              }
              else { 
                  return "Fehler im Code"; 
             }
         }
} 

$ich = new User;
$ich->setzOnstatus($_SESSION['onstatus']);

$anderer = new User;
$anderer->setzOnstatus($userstatus2);

echo $ich->zeigOnstatus($anderer);  
?>

Ich habs jetzt nicht probiert.
Dein Fehler war vor allem das Verschachteln von Funktionen, zudem war die obere Variable nicht definiert. ($rechte_status)
€: einen Tippfehler ausgebessert... zeigt trotzdem nen Fehler an. ^^
 
Zuletzt bearbeitet:
Das habe ich auch grade gefunden, ich ging davon aus das ich innerhalb einer function eine weitere starten kann. Das war bewusst so gewählt von mir, jetzt hab ich was gelesen das man es nicht kann und ich wars grade am ändern ;)

Danke für den Hinweis Lime, ich schau mir deines nun mal an, langsam bekomme ich so einen kleinen durchblick aber auch nur einen kleinen xd
 
Also die notice hab ich weg, habe auf den Tipp von Saftmeister zurück gegriffen mit:

PHP:
        public function __construct($rechte_status = null)
        {
             $this->online_status = $_SESSION['onstatus'];
             $this->rechte_status = $rechte_status;
        }

jetzt bleibt noch der Fatal Erroer der besagt das ich checkRechte nicht vergeben hätte

EDIT

eine weitere änderung habe ich nun unten vorgenommen:

PHP:
$ich = new User;
$ich->setzOnstatus($_SESSION['onstatus']);
$ich->checkRechte($rechte_status2);

$anderer = new User;
$anderer->setzOnstatus($userstatus2);
$anderer->checkRechte($rechte_status2);
echo $ich->zeigOnstatus($anderer);

Aber es bleibt bei der selben Fehlermeldung egal was ich ändere, hier nochmal mein derzeitiges script:

PHP:
<?php
session_start(); 
$_SESSION['onstatus'] = "online"; 
$userstatus2 = 'online'; # hier könnte auch der wert aus der db stehen 
$rechte_status2 = 1; // 1 = jeder 2 = derzeit keine chats 3 = kein zugriff
    
class User 
{ 
        var $online_status;
        private $rechte_status;
         
        public function __construct($rechte_status = null)
        {
             $this->online_status = $_SESSION['onstatus'];
             $this->rechte_status = $rechte_status;
        } 

        public function setzOnstatus($var) 
        { 
             $this->online_status = $var; 
        }	 
  private function habRecht($rechte_status2)
  {
    $this->rechte_status = $rechte_status2;
  }	
	   
        public function zeigOnstatus($user) 
        { 
             if(($this->online_status == $user->online_status)&& ($user->online_status !== 'offline'))
             { 
                  return $this->checkRechte($user);                  
             }
             elseif(($this->online_status == 'offline')&& ($user->online_status !== 'offline'))
             {
                  print "Sie müssen eingelogged sein um mit diesem User jetzt zu chatten.";
             }
             
              else {
                  print "User offline.";
             }
        }
        private function checkRechte($user) 
        {
              if(($this->rechte_status == $user->rechte_status)&&($this->rechte_status == 1)){
                  return "Du kannst mit deinem Gegenüber chatten";    
              }
              elseif(($this->rechte_status == $user->rechte_status)&&($this->rechte_status == '2')) {
                  return "Der andere möchte derzeit keine Chats";    
              }
              elseif(($this->rechte_status == $user->rechte_status)&&($this->rechte_status == '3')) {
                  return "Du hast kein Recht zu chatten";    
              }
              else { 
                  return "Fehler im Code"; 
             }
         }   

} 

$ich = new User;
$ich->setzOnstatus($_SESSION['onstatus']);
$ich->checkRechte($rechte_status2);    // line 62

$anderer = new User;
$anderer->setzOnstatus($userstatus2);
$anderer->checkRechte($rechte_status2);
echo $ich->zeigOnstatus($anderer);  
?>

hab echt keine idee mehr, fehler lautet:

Fatal error: Call to private method User::checkRechte() from context '' in line 62
 
Zuletzt bearbeitet:
Setz die Funktion checkRechte mal public. Ich hab sie private gewählt, weil man von Außen eigentlich keinen Zugriff drauf braucht, aber ich blick ja auch noch nicht so ganz durch, was die Rechte betrifft.

Ich habs zum Laufen gebracht. :D
PHP:
<?php 
session_start();  
$_SESSION['onstatus'] = "online";  
$userstatus2 = 'online'; # hier könnte auch der wert aus der db stehen  
$rechte_status2 = 1; // 1 = jeder 2 = derzeit keine chats 3 = kein zugriff 
     
class User  
{  
        var $online_status; 
        var $rechte_status; 
          
        public function __construct($rechte_status = null) 
        {
             $this->rechte_status = $rechte_status; 
        }
        public function giveRechte($rechte)
        {
             $this->rechte_status = $rechte;
        }

        public function setzOnstatus($var)  
        {  
             $this->online_status = $var;  
        }
        
        public function zeigOnstatus($user)  
        {  
             if(($this->online_status == $user->online_status)&& ($user->online_status !== 'offline')) 
             {  
                  return $this->checkRechte($user);                   
             } 
             elseif(($this->online_status == 'offline')&& ($user->online_status !== 'offline')) 
             { 
                  print "Sie müssen eingelogged sein um mit diesem User jetzt zu chatten."; 
             } 
              
              else { 
                  print "User offline."; 
             } 
        } 

        public function checkRechte($user)  
        { 
              if(($this->rechte_status == $user->rechte_status)&&($this->rechte_status == 1)){ 
                  return "Du kannst mit deinem Gegenüber chatten";     
              } 
              elseif(($this->rechte_status == $user->rechte_status)&&($this->rechte_status == '2')) { 
                  return "Der andere möchte derzeit keine Chats";     
              } 
              elseif(($this->rechte_status == $user->rechte_status)&&($this->rechte_status == '3')) { 
                  return "Du hast kein Recht zu chatten";     
              } 
              else {  
                  return "Fehler im Code";  
              } 
         }    

}  

$ich = new User; 
$ich->setzOnstatus($_SESSION['onstatus']);
$ich->giveRechte(1);

$anderer = new User; 
$anderer->setzOnstatus($userstatus2); 
$anderer->giveRechte(1);

echo $ich->zeigOnstatus($anderer);
?>
 
Zuletzt bearbeitet:
Siehe meinen vorherigen Post, ich habe es editiert. Es funktioniert nun.

Edit:
Ich vermute der Fehler lag beim __construct ...
Du hast online_status eine leere Variable (null) übergeben. Jedoch wurde diese nie definiert. Dafür hab ich jetzt eine eigene Funktion geschrieben. (Das klingt so weltbewegend, ist es leider nicht. :D)
 
Zuletzt bearbeitet:
Hey, ich danke für deine bemühungen, doch leider ist dies auch nicht die richtige Lösung, ich habe nun mal rechte_status auf 2 gesetzt und er bleibt wieder bim ersten eintrag.

Sicher das es bei dir funktioniert?

lg

EDIT:

SRY, mein Fehler, habe nun ganz unten $rechte_status2 für den Wert eingesetzt und es ging, tut mir leid, ich hab nicht richtig hingesehen.
 
Ja, ich habs nur mit 1 ausprobiert. Eigentlich mein Fehler, ich hätte es noch verallgemeinern müssen. Aber immerhin funktionierts. Wobei ich selber nicht verstehe, wieso es zu Beginn (in meiner "Vorversion") nicht funktioniert hat. Eigentlich hab ich die Werte auch übergeben, wenn auch in anderer Art und Weise.
 
ich habe jetzt mal meine gepostete und deine letzte Version verglichen, ich bin kein Freund von Copy Paste, ich möchte auch verstehen warum es geht.

Daher, was ist denn nun der unterschied? weil in der Function gibt es keine veränderung.
 
Zurück