Portál AbcLinuxu, 3. listopadu 2025 13:23
$obj = Ovoce();a z té třídy volám jiné třídy které potřebují instanci třídy 'Ovoce', existuje řešení jak to udělat? Děkuji
$this.
$obj = Ovoce();v class Ovoce zavolám jinou class Zelenina
$obj2 = Zelenina();a v class Zelenina potřebuji zavolat metodu v class Ovoce. je to lépe k pochopení? Děkuji
<?php
class Ovoce {
private $atribut;
private $obj2;
function __construct($atribut){
$this->atribut = $atribut;
$this->obj2 = new Zelenina($this);
}
function getAtribut(){
return $this->atribut;
}
function __toString() {
return "Ovoce a $this->obj2";
}
}
class Zelenina {
private $ovoce;
function __construct(Ovoce $ovoce){
$this->ovoce = $ovoce;
}
function __toString() {
return "zeleniny mám: " . $this->ovoce->getAtribut() . " kusů";
}
}
$obj = new Ovoce(42);
echo $obj;
Výsledek:
Ovoce a zeleniny mám: 42 kusů
Musím si to pořádně rozebrat.. Děkuji
ještě tady mám úplně obyčejnou class, ze které opět nedostanu nic jiného než nadafinované proměnné na false. V každé metodě se uloží string který se ještě vypíše pokud tam vložím echo, ale v poslední metodě "show" už jsou zase všechny proměnné false, kde se to ztrácí? Děkuji
class Test{
private $item1 = false;
private $item2 = false;
private $item3 = false;
public $show = false;
public function __construct(){
$this->item1();
$this->item2();
$this->item3();
}
public function item1(){
$this->item1 .= 'Text item1';
}
public function item2(){
$this->item2 .= 'Text item2';
}
public function item3(){
$this->item3 .= 'Text item3';
}
public function show(){
$this->show .= $this->item1;
$this->show .= $this->item2;
$this->show .= $this->item3;
}
}
$test = new Test();
var_dump($test->show); // bool(false)
Kde voláš tu metodu show()? Podle mne nikde. Atributu $show zůstane původní hodnota.Já jsem fakt pako
Kdo ti poradil, abys dělal atributy "public"? Mají být "private".Narážiš na tento zápis ?
public $show = false;Pokud ano, jak bych tu proměnnou pak vypsal?
A kdo ti poradil řetězit booleovskou hodnotu s řetězcem? Sice to tak nějak funguje, ale je to nesmysl.tak jak to má být? Měl jsem za to, že když se jedná o inicializace proměnné je to fuk..
public $show = ''; nebo public $show = ""; nebo úplně jinakDíky
<?php
class Test {
private $item1 = 'Text item1';
private $item2 = 'Text item2';
private $item3 = 'Text item3';
public function __toString() {
return $this->item1 . $this->item2 . $this->item1;
}
}
$test = new Test();
echo $test;
Všechno ostatní je tam jaksi "navíc" a není příliš patrné, proč to tam máš.
Vyhýbej se operátorům ".=" - nejsou moc efektivní a většinou ani nejsou potřebné.
Všechno ostatní je tam jaksi "navíc" a není příliš patrné, proč to tam máš.Byl to jen příklad, metody jsem tady nechtěl z důvodu přehlednosti rozvádět... Když si vezmu cenné ponaučení a vycházím z původního příkladu, tak ted je to OK ? Děkuji
class Test{
private $item1;
private $item2;
private $item3;
public function __construct(){
$this->item1();
$this->item2();
$this->item3();
}
public function item1(){
$this->item1 = 'Text item1';
}
public function item2(){
$this->item2 = 'Text item2';
}
public function item3(){
$this->item3 = 'Text item3';
}
public function show(){
$this->show = $this->item1.$this->item2.$this->item1;
}
public function __toString(){
return show();
}
}
$test = new Test();
echo($test->show());
public function __toString(){
return $this->item1.$this->item2.$this->item1;
}
tak vůbec nebudeš potřebovat volat metodu show()
$test = new Test(); echo($test);Uvnitř objektu si udržuj atributy v atomickém stavu, ale vně objektu je prezentuj jako komplexní hotovou informaci, kterou k něčemu potřebuješ. Nesnaž se z vnějšku manipulovat s jednotlivými atributy, to je úkolem metod uvnitř objektu.
Metodu __toString() tam máš navíc, protože jsi ji nepoužil.jak to že jsem ji nepoužil? ta metoda se zpracuje přece vždy?
U metody show() ti chybí return.Ano to je pravda, to co jsem napsal je nesmysl, čili se dvěma metodama asi takto (doufám)
public function show(){
return $this->item1.$this->item2.$this->item1;
}
public function __toString(){
return show();
}
Uvnitř objektu si udržuj atributy v atomickém stavu, ale vně objektu je prezentuj jako komplexní hotovou informaci, kterou k něčemu potřebuješ.Vůbec netuším co je to atomický stav, musím pohledat a nastudovat...
Nesnaž se z vnějšku manipulovat s jednotlivými atributy, to je úkolem metod uvnitř objektu.No a tohle jde úplně mimo mne. Absolutně nerozumím co se mi snažíš poradit...
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.