Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Q 12. 07. 2018, 07:16:14
-
Snažím se na Raspberry Pi provozovat následující kód, viz. niže. Raspbian vycházející z Debianu 8 - PHP 5.x, nefungovalo. PHP bylo trošku vousaté. Zkusil jsem tedy Raspbian postavený na Debianu 9 - PHP 7.0 a taky to neběží. Stejná zkušenost nakonec i s VPS s Ubuntu 16.04 - PHP-7. Gentoo - PHP 7.1, OK. VPS s Ubuntu 18.04 - PHP 7.2, OK.
<?php
class A
{
private $BB;
public function __construct()
{
$this->$BB = new B;
$this->$BB->PridejPolozku("2");
$this->$BB->PridejPolozku("3");
}
public function Prehled()
{
$this->$BB->Generuj();
}
}
class B
{
private $polozky=array();
public function __construct()
{
$this->$polozky[] = "1";
}
public function PridejPolozku($polozka)
{
$this->$polozky[] = $polozka;
}
public function Generuj()
{
foreach($this->$polozky as $polozka)
echo($polozka."<br>");
}
}
$AA = new A();
$AA->Prehled();
Chyba:
Notice: Undefined variable: polozky in /var/www/html/test.php on line 27
Fatal error: Uncaught Error: Cannot access empty property in /var/www/html/test.php:27 Stack trace: #0 /var/www/html/test.php(9): B->__construct() #1 /var/www/html/test.php(43): A->__construct() #2 {main} Next Error: Cannot access empty property in /var/www/html/test.php:27 Stack trace: #0 /var/www/html/test.php(9): B->__construct() #1 /var/www/html/test.php(43): A->__construct() #2 {main} thrown in /var/www/html/test.php on line 27
Ok:
1
2
3
Poněkud mě to mate, protože o OOP a PHP čtu docela dlouho. Snažím se dělat nějakou totální prasárnu a PHP >7.1 už je blbuvzdornější, PHP <= 7.0 to prostě neumí, nebo ty verze jsou náhoda a nemám něco doinstalované, odkomentované, ... ?
Díky
-
V PHP uz dlouho nedelam, ale nemel by jsi pristupovat k promennym tridy takto? $this->polozky misto $this->$polozky ten znak dolaru je tam navic.
-
I nové verze ti ty chyby budou vyhazovat. Vyzkoušej například: http://sandbox.onlinephpfunctions.com/
Důvod, proč ti to chyby nevyhazuje může být v tom, že nemáš nastavené vypisování NOTICE.
Jinak skutečně pro přístup v property v třídě se používá: "$this->property" místo "$this->$property"
-
V PHP uz dlouho nedelam, ale nemel by jsi pristupovat k promennym tridy takto? $this->polozky misto $this->$polozky ten znak dolaru je tam navic.
Bingo!
-
V PHP uz dlouho nedelam, ale nemel by jsi pristupovat k promennym tridy takto? $this->polozky misto $this->$polozky ten znak dolaru je tam navic.
Dík, to je přesně ono, $ tam nepatřil. Už mi to jede i ve starší verzi.
I nové verze ti ty chyby budou vyhazovat. Vyzkoušej například: http://sandbox.onlinephpfunctions.com/
Důvod, proč ti to chyby nevyhazuje může být v tom, že nemáš nastavené vypisování NOTICE.
Zajímavá adresa, ta se ještě bude hodit. Dík.
Jinak asi máš pravdu. Na jednom z těch VPS běží mailserver a webserver tam je jen kvůli Roundcube. Chybové hlášky na webu nejsou žádoucí, takže vypnuty. U toho Gentoo s PHP 7.1 teď nevím ale pravděpodobně výchozí stav, tedy bez chybových hlášek.
-
Nemohlo to fungovat na ziadnej verzii PHP kedze kod nie je validny.
$this->$polozky[] = $polozka; vravi to, ze do atributu s nazvom hodnoty premennej $polozky chces vlozit hodnotu $polozka, ale v triede takyto atribut neexistuje, resp. hodnota premennej $polozky je null, kedze nikde nie je definovana a preto aj to Fatal Error.
Na produkcnych servroch by mali byt chybove hlasenia vypnute, takze preto si nevidel tu chybovu hlasku. Ak by si pozrel do error logu, tak to tam urcite najdes.