Autor Zpráva
HonzaM
Profil *
Ahoj, potřeboval bych poradit s referencemi na objekt. Mám nějaký takovýto kod:
class Pokus 
{
   private $x = null;
   public function __construct(Pokus1 &$obj)
   {
       $this->x = $obj;
   }
   
   
   public function GetPokus1($i)
   {
       $this->x->SetCislo($i);
       return $this->x->GetCislo();
   }
}

class Pokus1
{
    private $int;
    public function __construct($i)
    {
        $this->int = $i;
    }
    
    public function SetCislo($i)
    {
        $this->int = $i;
    }
    
    
    public function GetCislo()
    {
        return $this->int;
    }
}

i
include "Pokus.php";
$p1 = new Pokus1(10);
echo $p1->GetCislo()."<br>"; //Vrátí 10

$pokus = new Pokus(&$p1);
echo $pokus->GetPokus1(100)."<br>"; //Vrátí 100

echo $p1->GetCislo()

Tento kod mi ale hlásí chybu: Call-time pass-by-reference has been removed na řádku s $pokus = new Pokus(&$p1);
Co je na tom špatně? Teprve s referencemi začínám a pořádně jim nerozumím. Když tam nemám & tak mi to vypíše 10 100 100 a když se mi tam povede dám ten & tak by to mělo vypisovat 10 100 10 že jo?
Díky za vysvětlení a pomoc :)
Majkl578
Profil
HonzaM:
Co je na tom špatně?
Reference nelze používat při volání funkcí/metod.

Objekty se předávají by-reference automaticky, není třeba používat & pro objekty (až na velmi specifické případy, které v 99.9% nebudeš nikdy potřebovat).
Nauč se logicky pojmenovávat třídy a metody, Pokus a Pokus1 nedávají smysl a jsou matoucí.
HonzaM
Profil *
Jasně, ty názvy tam byly jenomtak narychlo napsané...Já dělám třídu Form, která bude mít metodu AddElement a do ní chci dávat objekty Input, SelectBox, TextArea...Myslel jsem že bude lepší dělat to pomocí referencí, že by to bylo rychlejší
Majkl578
Profil
HonzaM:
bude lepší
Nebude.

by to bylo rychlejší
Nebylo, navíc to ani nedává smysl (viz můj předchozí příspěvek). Tohle je zbytečná paranoia, primárně by objektový návrh aplikace neměl být přímo ovlivněn snahou o co nejefektivněší kód, pak bys mohl rovnou psát procedurální kód, který je zákonitě rychlejší / méně náročný.

Já dělám třídu Form
Máš nějaký důvod nepoužít již hotové existující řešení? Například Nette framework má zrovna formuláře dobře vyřešené (dokumentace, API), přinejmenším se můžeš inspirovat z pohledu objektového návrhu.
HonzaM
Profil *
Tak použít třeba Nette bych mohl, koukal jsem jak to tam řeší, tohle dělám spíš z nudy abych si procvičil OOP :)
Takže teda reference není třeba používat?
Alphard
Profil
HonzaM:
Takže teda reference není třeba používat?
Majkl to napsal 2x, pak už asi neměl sílu :-) Jestli nevěříte, viz manuál http://php.net/manual/en/language.oop5.references.php.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: