PHP Obiektowy problem z keyword private

0

Witam!
Mam taki oto kod:

<?
   
class Klasa 
{
       private $pole1;
	   
	   public function setPole1($text)
	   {
		$this->$pole1 = $text;
	   }
	   
	   public function displayPole1()
	   {
			echo $this->$pole1;
	   }
	   
}
	   
	  $o = new Klasa;
	  
	  $o -> setPole1("abasdc");
	  
	  $o->$pole1="aaaaaa";
	  
	  $o -> displayPole1();
?>

Jak to możliwe że wykonując linię

$o->$pole1="aaaaaa";

PHP nie pluje błędem dostępu do zmiennej,tylko wykonuje tą instrukcję, skoro $pole1 jest private?

Aha efektem działania tego kodu jest wyświetlenie napisu:
aaaaaa

0

Aż dziw. Zmienna $pole1 jest niezdefiniowana, więc co mogłoby być, $o->null? Myślę, że PHP działa tutaj tak: najpierw wykonywane jest przypisanie $pole1 = "aaaa", a następnie wykonywana jest instrukcja $o->aaaa, która sama w sobie nic nie robi.
Natomiast jak spróbujesz napisać $o->pole1 = "aaaa", to już powinno wysypać słusznym błędem.

0

Zrobiłeś częsty błąd.

Zapis $o->$pole1 powoduje odwołanie się do pola w obiekcie $o, ale nie do pola "pole1", ale do pola, którego nazwa przechowywana jest w zmiennej $pole1.

Prawidłowy kod:

class Klasa 
{
       private $pole1;
 
           public function setPole1($text)
           {
                $this->pole1 = $text;
           }
 
           public function displayPole1()
           {
                        echo $this->pole1;
           }
 
}
 
          $o = new Klasa;
 
          $o -> setPole1("abasdc");
 
          $o->pole1="aaaaaa";
 
          $o -> displayPole1();

generuje oczywiste błędy:

PHP Fatal error:  Cannot access private property Klasa::$pole1 in E:\Marcin\Temp
\test2.php on line 23

Fatal error: Cannot access private property Klasa::$pole1 in E:\Marcin\Temp\test
2.php on line 23

Swoją drogą jednak, twój kod, również generuje błędy:

PHP Notice:  Undefined variable: pole1 in E:\Marcin\Temp\test2.php on line 9

Notice: Undefined variable: pole1 in E:\Marcin\Temp\test2.php on line 9
PHP Fatal error:  Cannot access empty property in E:\Marcin\Temp\test2.php on li
ne 9

Fatal error: Cannot access empty property in E:\Marcin\Temp\test2.php on line 9

Gdzie ten notice o niezdefiniowanej zmiennej na początku wskazuje, gdzie leży problem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1