- MG4 menetpróba
- Xiaomi Mi 9 Lite - kilencre érdemes lapot húzni
- Samsung Galaxy Z Fold5 - toldozás-foldozás
- Samsung Galaxy S24 - nos, Exynos
- Samsung Galaxy S21 FE 5G - utóirat
- Honor Magic6 Pro - kör közepén számok
- Android szakmai topik
- Samsung Galaxy A54 - türelemjáték
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- iPhone topik
Hirdetés
-
Sokat fogyaszt az AI, egyre több az adatközpont, kell az atomenergia
it Az AI-t kiszolgáló adatközpontok olyan nagy energiaigénnyel bírnak, hogy egyre több atomenergiára van szükség.
-
Free Play Days 2024 - 18. hét: Headbangers: Rythm Royale
gp Extraként a Star Wars Jedi: Survort is kipróbálhatjuk 5 óra erejéig.
-
Alacsony fogyasztású, 128 GB-os szervermemóriát kínál a Micron
ph Az új RDIMM TSV technológia alkalmazása nélkül éri el a címben említett tárkapacitást.
Új hozzászólás Aktív témák
-
jeges
senior tag
válasz Speeedfire #6350 üzenetére
nem biztos, hogy jól értelek, de a függvények szempontjából nem is értelmezhető. a call_user_func() egy felhasználó által definiált függvényt/eljárást hív meg, a meghívott függvény/eljárás paramétereivel. mivel jelen esetben objektum eljárásáról van szó, az eljárás paramétere lehet mindkét string. ha jól gondolom, az egész példa arra jó, hogy bemutassa, hogy lehet előre nem definiált tulajdonságú osztályokat kezelni.
-
Speeedfire
nagyúr
A példa a __set() és a __get() parancsokat akarja bemutatni, hogy a __get() megnézni és ellenőrzi a dolgokat aztán a __set() pedig beállítja, csak közben még mást is implementáltak bele, így már kicsit több infó van benne mint kellene.
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
PazsitZ
addikt
válasz Speeedfire #6347 üzenetére
[link]
Első paraméter: array($this, $tulajdonosnev . 'Beallitas') - function név
többi paraméter(opcionális): $ertek - paraméter(ek)
Ha osztály function nevére kell hivatkoznod, mint string, azt így teheted: array(classnév,functionnév)
tehát az aktuális osztály($this), $tulajdonosnev.'Beallitas' sztringösszefűzés adta functiont hívod meg.A __set(), __get() magic methodok a nem definiált tagváltozókat fogadják és szimulálják za általad implementált módon, ilyen formában nincs köze a call_user_func() fgv.-hez.
[ Szerkesztve ]
- http://pazsitz.hu -
-
Sk8erPeter
nagyúr
válasz Speeedfire #6341 üzenetére
Szerintem speciel az "1985. 08. 27." pont nem egy érvényes dátum, amit megeszik az strtotime függvény.
"1985 08 27" - ez sztem megint nem érvényes dátumformátum, így jogosan dobja a kivételt.
Mellesleg így elsőre nekem úgy tűnik, hogy a könyv az OOP-s részt kezdőknek feleslegesen elbonyolítja, mert így csak nézel, hogy mi a bré van...
Én annak idején C++-ból értettem meg elég jól az OOP-t, elsőre ilyen magic függvényekkel "varázsolni" fura lett volna, tuti nem vágtam volna elsőre, mi a pálya. Így utólag belátom, hogy ezek könnyíthetik a melót, de elsőre érdemes sztem a hagyományos módszerekkel tisztában lenni, hogy értsd, de ez mondjuk csak egyéni vélemény. Ezért fura a könyv felépítése.Sk8erPeter
-
Sk8erPeter
nagyúr
"szerintem próbáld külön a köszöntésig egy ciklusba (megjegyzem, logikailag nekem egyébként is az tűnik egy teljes ciklusnak)"
Hol van itt ciklus?
try {
$obj->szuletesidatum = '1985. 08. 27.';
}
catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
} if (!isset($e)) {$obj->koszontes();}???
a köszöntésnek épp a dátum után kéne lennie...
if (!isset($e)) {$obj->koszontes();}
Ennek meg a végén bocsi, de totál semmi értelme.
Így pont a try-catch szép logikus blokkját bontod meg.
Amennyiben kivételt dobunk, akkor úgysincs köszöntés, tehát egy tök felesleges feltételvizsgálatot tettél a végére.Meg még ezt írtad:
try {
$obj->szuletesidatum = 'piros';
$obj->koszontes();
}
catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
} if (!isset($e)) {$obj->koszontes();}
Főleg úgy nincs értelme, hogy amennyiben nem lenne kivétel attól, hogy beállítod "piros"-ra a változót, kétszer futna le a köszöntés.Sk8erPeter
-
Tele von Zsinór
őstag
válasz Sk8erPeter #6357 üzenetére
Arról nem is beszélve, hogy $e csak a catch blokkon belül van, amint annak vége, kikerül a scope-ból, és megsemmisül.
-
Sk8erPeter
nagyúr
válasz Tele von Zsinór #6358 üzenetére
Ja tényleg, az meg a másik. Tehát magyarul ha lenne is kivételdobálás, akkor is le akarna futni az $obj->koszontes(); függvény, mert teljesülne, hogy nem létezik az $e változó.
Sk8erPeter
-
LW
őstag
Ismét haldoklik a mysql. InnoDB táblában Foreign key lehet NULL?
-
LW
őstag
Az adatbázis és a phpscriptek ATW-s szerveren tökéletesen működnek, egyedül localhost/phpmyadmin dobál Connection was reseteket, de már a hajamat tépem.
Segítsetek légyszi!
-
jeges
senior tag
válasz Sk8erPeter #6357 üzenetére
mindenekelőtt köszönöm a kiegészítéseket.
ciklus úgyben nem programozási struktúráról, hanem logikailag összetartozó lépések sorozatáról volt szó, ha megtévesztő számodra a megfogalmazás, elnézést.
!isset($e) részre vonatkozóan igazad (igazatok) van természetesen, itt valahonnan máshonnan vettem a kódrészletet. különösebb galibát egyébként az első esetben nem okoz, a második esetben valóban dupláz (ami nyilván kiderülne az első hibamentes futás alkalmával)
"a köszöntésnek épp a dátum után kéne lennie..." - felvetésre:
az, hogy a try/catch-ben vizsgált jelenség utáni lépést a szerkezetbe vagy utána teszed, környezetfüggő. nem néztem vissza, de emlékeim szerint itt "belefért" mindkettő. az viszont bizonyos, hogy az első hibamentes futás előhozza, ha mégsem a várt eredmény születik. a példa szempontjából majdnem mindegy. -
jeges
senior tag
nekem is lenne egy kérdésem:
a)
$out = "";
for ($i = 0; $i < 10000; $i++) {
$out .= " " . $i;
}
print $out;b)
for ($i = 0; $i < 10000; $i++) {
print " " . $i;
}c)
$ar = array();
for ($i = 0; $i < 10000; $i++) {
array_push($ar, $i);
}
print implode(" ", $ar);melyik hatékonyabb, ill. gyorsabb, ha nagyobb adattömeget szeretnék a kliensre küldeni?
(cache kezelést meg egyebeket most hagyjuk figyelmen kívül) -
-
PazsitZ
addikt
Tudtommal az array_push, több érték esetén lehet gyorsabb, így egyesével semmikép sem. Akkor már inkább:
$arr[] = $iEgyébként a tömbműveletek gyorsak, tehát nem biztos, hogy a folyamatos konkatenációt nem nyomja le a tömbbe pakolás és végül implode.
De le kell mérni.- http://pazsitz.hu -
-
LW
őstag
Öhm... Megvan a megoldás és ez fájt.
Mi volt az, ami eddig nem volt és a közelmúltban került a képbe? Sokadik Apache-mysql-php trió után sorra elkövettem?
A phpeditor debugja hülyítette meg ennyire az apacheot. Reggel felkeltem, raktam fel egy újabb wampot, jól ment, egészen addig, amig nem volt debugra szükségem. Beállítottam a szerkesztőt és jött a facepalm meg a Connection was reset.Azt hiszem, tanulságos volt.
-
Sk8erPeter
nagyúr
Ciklussal kapcsolatban: programozási kérdésekben az ilyen jellegű alapfogalmak elég ritkán sokértelműek, jelen esetben is egyértelmű a jelentése, és programozásnál meg főleg nem mindegy, hogy egy adott szót a tényleges jelentése alapján használsz, vagy csak saját definíciót találtál-e ki rá, képzeld el, mi lenne pl. csapatmunkánál, ha mindenki más és más értelemben használná a fogalmakat.
A Wikipédiás meghatározás a ciklusra:
Ciklus (programozás)
"A ciklus, vagy iteráció a számítógép-programozás és az algoritmusok egyik alapvető eszköze, amely az ismétlődő (azonos vagy hasonló) tevékenységek megvalósítására szolgál. A ciklus beépítését a programba ciklusszervezésnek is nevezik. A ciklust az egyes programozási nyelvek különböző kulcsszavakkal valósítják meg, de a működési módjukat tekintve három alaptípusba sorolhatók aszerint, hogy hányszor futnak le: ezek az elöltesztelő, a hátultesztelő és a számlálós ciklus."Ne vedd kötekedésnek, nem azért mondtam, hanem csak hogy tisztázzuk.
"különösebb galibát egyébként az első esetben nem okoz"
Hát ha nincs kivétel, akkor valóban nem probléma, de ellenkező esetben elég para."az, hogy a try/catch-ben vizsgált jelenség utáni lépést a szerkezetbe vagy utána teszed, környezetfüggő."
Hát nekem most a try-catch blokkokkal kapcsolatban nem jut eszembe olyan környezet, ahol a logikának teljesen ellentmondó megoldást kéne alkalmazni. De mondj ilyet, ha van rá ötleted.
A try-catch esetén még az osztály példányosítását is a legtöbb esetben belepakolják a blokkba, mivel még a konstruktornál is történhet kivétel, ha valamiért nem sikerül a példányt létrehozni, ennek a kivételét is kezelni kell.
Az említett példában a köszöntéssel kapcsolatos függvény pont szervesen hozzátartozik a korábbiakhoz, tehát nagyon nem logikus, ha épp a try-catch blokk után teszed annak a függvénynek a meghívását, aminek a lefutása épp attól függ, hogy volt-e kivétel vagy sem.
"a példa szempontjából majdnem mindegy."
Többek közt a fent említett indokok miatt nagyon nem.Sk8erPeter
-
Brown ügynök
senior tag
Megújult a Symfony 2 honlapja. Holnaptól pedig tölthető a keretrendszer! Gondolom a honlap a Symfony 2-re épül, így elmondhatjuk, hogy nem kicsit gyors a rendszer.
Symfony
Check this out!"hacsak nem jön a jó tündér break utasítás képében..."
-
jeges
senior tag
válasz Sk8erPeter #6367 üzenetére
"Többek közt a fent említett indokok miatt nagyon nem"
abból a szempontból teljesen mindegy, hogy a kérdés feltevésekor
1) egyáltalán nem volt try/catch, így az egész hibára futott
(úgy gondolom ez volt az alapprobléma, amit megoldottunk)
2) a dátumkezelés miatt is hibára futott
(ez is megoldódott)a fentiek ellenére/mellett már elmondtam, hogy
1) mea culpa a megtévesztő szóhasználatért
(mellesleg azt gondolom, aki nem akarja, nem érti félre)
2) (még egyszer) köszönöm a kiegészítést, hiszen a megoldás valóban kiegészítésre szorult
3) az első hibátlan futás előhozza az addig esetleg elfedett nem várt működéseket
(lehet, mással nem fordul elő, hogy egy problémára koncentrálva elsiklik egy másik felett, velem bizony előfordul)amennyiben Te is egyetértesz, továbbléphetnénk.
-
jeges
senior tag
válasz Tele von Zsinór #6364 üzenetére
igaz, csak gondoltam, hátha van tapasztalat.
kicsit teszteltem:
cca 25000 elemig (ill az alatt) az a) a nyerő, a b) a második (10000 elemnél 20% körüli a különbség), végül a b) cca 20%-ot ver a c)-re
durván 25000 felett viszont megfordul a helyzet: a b) egyre jobban lekörözi az a)-t. 100000 elem esetén már erős 20% a difi a b) javára. a c) egyértelműen a leglassabb.azaz a sorrend: a -> b -> c ha kb 25ezer és alatta vagyunk, efölött pedig b -> a -> c
szerk:
persze ez nem egy "rendes" tesztrendszer, csak amolyan koca mérés. néhányszor lefuttattam, 25000 és alatta a b) nem mutat túl stabil eredményeket, de a sorrendet nem tudja "áttörni" a szórás[ Szerkesztve ]
-
Inv1sus
addikt
válasz Brown ügynök #6368 üzenetére
Na akkor majd kezdhetek tanulni megint.
*** WEBDESIGN, GRAFIKUS DESIGN, FRONT-END PROGRAMOZÁS ***
-
shaggy
aktív tag
Sziasztok!
Már elég sok helyen néztem és nekem akkor sem akar összejönni a dolog könyv alapján csináltam frissebb verzióval mint a könyvben van de nekem nem műkődni.
Szóval
felraktam a php5.3.5 és hozzá az Apace 2.2.17 és a test az (its work ) felirat be is jön.
De amikor a test php-t futtatom akkor az már nem az egész kódrészletet írja ki miért csinálja ezt?Üdv.
-
shaggy
aktív tag
válasz Sk8erPeter #6374 üzenetére
ez az akart lenni h a test.php-t nem jeleníti meg nekem hanem ami benne van kódrész azt írja ki és nem tudom miért.
-
LW
őstag
Jó estét/hajnalt!
Hogyan lehet és érdemes megcsinálni a rövid "barátságos" url-eket? pl. http://domainem.hu/blog/egy_cikk/ => index.php?m=blog&content=egy_cikk
Rágugliztam, találtam egy pár lapot az apache mod_rewrite lehetőségéről. Holnap megnézem.
üdv. LWszerk: Gondoltam hátha tudsz valami zseniálisabb megoldást. Ám rendben.
[ Szerkesztve ]
-
Speeedfire
nagyúr
válasz PazsitZ #6355 üzenetére
Ez az, hogy a példa programban nincs olyan tulajdonság, hogy xyz beallítas vagy xyz lekerdezes. [link]
Ezért nem értem én, hogy mire akar ott hivatkozni. Vagy így automatikusan létre akarja hozni?
Sk8erPeter: Igen, én is úgy érzem, hogy kicsit túl akarja bonyolítani az elején a könyv ezt. Holott a fejezetet címe bevezetés az oop elméletbe...a következő fejezet lenne az ami a magic methodokkal foglalkozna elméletileg....Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Tele von Zsinór
őstag
válasz Speeedfire #6379 üzenetére
A példaprogram lényegi része:
definiál egy tulajdonságok belső változót, benne létrehozva a helyet az érvényes tulajdonságoknak
definiál egy függvényt szuletesidatumBeallitas néven, ami az adott tulajdonság beállításával foglalkozik
definiál egy mágikus __set függvényt, ami akkor hívódik meg, mikor egy nem létező tulajdonságot próbálsz beállítani. Működése:
- ha a $_tulajdonsagok tagban nincs olyan kulcs, akkor hiba
- ha létezik "tulajdonságnévBeallitas" függvény, akkor meghívja
- amúgy beállítja az adott tulajdonságotAmit megmutat: hogy lehet általános magic settert írni úgy, hogy ha egy-egy esetben mégis spec. működés kell, megoldja. A getterben ott a párja, ami "tulajdonságnévLekerdezes" nevű függvényt keres.
-
shaggy
aktív tag
válasz Sk8erPeter #6376 üzenetére
de localhost nyitom meg http:/localhos akkor behozza az apache az it's work! oldalát!
De amikor a test.php próbálom akkor csak a kódot írja ki nem amit kellene és nem tudom miért. -
Speeedfire
nagyúr
válasz Tele von Zsinór #6380 üzenetére
definiál egy mágikus __set függvényt, ami akkor hívódik meg, mikor egy nem létező tulajdonságot próbálsz beállítani. Működése:
- ha a $_tulajdonsagok tagban nincs olyan kulcs, akkor hiba
- ha létezik "tulajdonságnévBeallitas" függvény, akkor meghívja
- amúgy beállítja az adott tulajdonságotEz nagyon hasznos volt. Főleg a vége, szóval beállítja az adott kérést.
Eddig csak azt tudtam, hogy a php alapból meghíva a __set() __get() függvényeket és ott keresi ha nincs meg egy adott függvény.Csak engem megzavart, hogy nem volt a példa programban olyan, hogy:
-tulajdonsagnevLekerdezes
-tulajdonsagnevBeallitasFotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
shaggy
aktív tag
így van elé írtam a taget én a rövidet használtam és engedélyezve is volt és azt az útvonalat használtam amit leírtál igen de nekem akkor sem jó nem tudom miért csinálja ezt.
Most megpróbálom a PHP4 leszedni és a könyv alapján mert én a php5 raktam fel de nekem nem nagyon akar működni. -
Sk8erPeter
nagyúr
akkor ne a rövidet használd, tehát ne a <? nyitótagformát, hanem a <?php változatot.
Rendesen le is van zárva a kód ?> jellel?
Milyen címen próbálod elérni? Fizikailag hol van a fájl?
NE használd a PHP4-et, inkább visszafelé ne haladj az időben, maradj csak a PHP5-nél.
Egyébként ahogy a többiek is mondták, lehet, hogy inkább le kéne szedned az eddigi feltelepített Apache-ot és PHP-t, aztán felrakni sokkal egyszerűbben egyszerre, jól bekonfigolva az összes csomagot, mégpedig a WAMP vagy AppServ segítségével.
Ezek pár kattintással felmennek, viszont faszán telepít mindent, és nem kell vele szívni. Tégy vele egy próbát.Sk8erPeter
-
Speeedfire
nagyúr
válasz Sk8erPeter #6387 üzenetére
Wamp-ot használok, de gondoltam meglesem ezt a appserver-t erre mit látok.
Php 6.0.0 dev. Ez mióta van, vagy mi lesz benne az újítás? Nekem ez most nagyon új infó, eddig erről nem tudom.Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
shaggy
aktív tag
válasz Sk8erPeter #6387 üzenetére
Igen rendesen le van zárva próbáltam röviddel és hosszúval is egyik sem jó még mindig a teljes kódrészletet írja ki.
De most letörlöm és amit mondtatok azt fogom feltenni és akkor remélem megoldódik a problémám -
shaggy
aktív tag
válasz Sk8erPeter #6387 üzenetére
Felraktam a wampot és csodálatosan működik köszönöm mindenkinek a segítséget azt hiszem ezt fogom használni!
-
Brown ügynök
senior tag
válasz Speeedfire #6388 üzenetére
Nincs még PHP 6. A hivatalos oldal szerint a következő verzió az 5.3.6. lesz.
"hacsak nem jön a jó tündér break utasítás képében..."
-
Speeedfire
nagyúr
válasz Brown ügynök #6391 üzenetére
Ez az, hogy én is csak rc-est láttam a php oldalán....5.3.6RC2 (03 Marchy 2011)
Az appserver oldalán meg ez van...
Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Tele von Zsinór
őstag
válasz Speeedfire #6392 üzenetére
Valószínűleg saját fordítás, mert készítik egy ideje a php6-ot. Ott is van a neve végén, hogy dev verzió.
Korábbira: az általad adott kódban pont van egy xyBeallitas példa.
-
Speeedfire
nagyúr
válasz Tele von Zsinór #6393 üzenetére
Igen azt én is észrevettem, hogy developer verzió, csak a hivatalos oldalon egy szó sem esik erről. Ha valóban készül akkor lehet tudni, hogy mik lesznek az újítások?
Most akkor lehet megint félreértettem valamit. Ha jól értettem akkor a függvény a __get() részben megnézni, hogy van-e az adott néven ilyen függvény, ha van akkor meghívja ha nincs akkor elkészíti ellekező esetben kivételt dob nekem.
class TulajdonsagObjektum {
private $_tulajdonsagok;
public function __construct() {
$this->_tulajdonsagok = array();
$this->_tulajdonsagok['nev'] = null;
$this->_tulajdonsagok['szuletesidatum'] = null;
}
function __get($tulajdonsagnev) {
if(!array_key_exists($tulajdonsagnev, $this->_tulajdonsagok)) {
throw new Exception('Ervenytelen tulajdonsag-érték!');
}
if(method_exists($this, $tulajdonsagnev. 'Lekerdezes')) {
return call_user_func(array($this, $tulajdonsagnev . 'Lekerdezes'));
}
else {
return $this->_tulajdonsagok[$tulajdonsagnev];
}
}
function __set($tulajdonsagnev, $ertek) {
if(!array_key_exists($tulajdonsagnev, $this->_tulajdonsagok)) {
throw new Exception('Ervenytelen tulajdonsag-ertek');
}
if(method_exists($this, $tulajdonsagnev . 'Beallitas')) {
return call_user_func(array($this, $tulajdonsagnev . 'Beallitas'), $ertek);
}
else {
$this-> _tulajdonsagok[$tulajdonsagnev] = $ertek;
}
}
function szuletesidatumBeallitas($szd) {
if(strtotime($szd) == false) {
throw new Exception('A szuletesi datumnak egy ervenyes naptari napnak kell lennie!');
}
else {
$this->_tulajdonsagok['szuletesidatum'] = $szd;
}
}
function koszontes() {
echo 'Szia! '.$this->nev.' vagyok! '.$this->szuletesidatum.' -an/en szulettem!<br/>';
}
}
try {
$obj = new TulajdonsagObjektum();
$obj->nev = "Szabi";
$obj->szuletesidatum = '1985-08-27';
$obj->koszontes();
}
catch (Exception $e) {
echo 'Hiba: ', $e->getMessage(), "\n";
}Ugye itt a __get() második if ágában van a vizsgálata ennek. Vagy te arra az egy db szuletesidatumBeallitasra gondoltál? Mert abban az esetben valóban van ilyen de a többi esetben nincs ilyen típusú függvény.
Viszont most megint felmerült egy kérdés a fejemben? Nem lenne célszerűbb már a __get() résznél megvizsgálni a dolgokat? dátum, név stb? Mert így feleslegesen dolgozik utána még a __set() is. Akkor már a kivételkezelés az elején végbe menne.Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
-
Sk8erPeter
nagyúr
válasz Speeedfire #6394 üzenetére
"van-e az adott néven ilyen függvény, ha van akkor meghívja ha nincs akkor elkészíti"
Nem készít el semmilyen függvényt.
Függvényt legfeljebb meghív. [call_user_func()]"Nem lenne célszerűbb már a __get() résznél megvizsgálni a dolgokat? dátum, név stb? Mert így feleslegesen dolgozik utána még a __set() is."
Másra való a kettő! A getter függvényekkel lekérdezel bizonyos attribútumokat, változóértékeket, a setter függvényekkel pedig beállítod azok értékét.Ha be akarnám állítani vagy épp le akarnám kérdezni a "pityipalko" változó értékét, akkor arra nyilván kivételt dobna, mert nincs ilyen (ha beállítottad volna a konstruktorban, akkor lenne ilyen! példa:
$this->_tulajdonsagok['pityipalko'] = null;).
De a $_tulajdonsagok tömbben létezik 'nev' és 'szuletesidatum' index is, így azokhoz tartozik egy érték, azok beállíthatók, lekérdezhetők.Amikor ezt írod:
$obj->szuletesidatum = '1985-08-27';
Akkor tulajdonképpen a "mágikus" __set függvény hívódik meg, a __set $tulajdonsagnev paramétere megkapja a 'szuletesidatum' sztringet, az $ertek pedig az '1985-08-27' értéket.Ezután az array_key_exists() függvénnyel megvizsgáljuk, hogy a $_tulajdonsagok tömbben beállítottunk-e egyáltalán 'szuletesidatum' index-szel bármit (ami a konstruktorban egyébként null értéket kapott [lásd $this->_tulajdonsagok['szuletesidatum'] = null;], de ezzel már létrejött ezen az indexen egy érték), ha nem, kivétel, ha igen, megyünk tovább.
Ezután megvizsgálja, létezik-e az osztály adott példányában ($this) $tulajdonsagnev . 'Beallitas' nevű függvény - tehát esetünkben szuletesidatumBeallitas nevű függvény (mivel konkatenálja a $tulajdonsagnev változó értékét a 'Beallitas' sztringgel, majd megvizsgálja, van-e ilyen metódus ( method_exists() függvény).
Ha létezik ilyen metódus, akkor meghívja azt, különben pedig csak simán beállítja a $tulajdonsagnev nevű indexen található értéket a $_tulajdonsagok tömbből.Remélem valamennyire érthetően mondtam el.
[ Szerkesztve ]
Sk8erPeter
-
j0k3r!
senior tag
válasz Sk8erPeter #6395 üzenetére
ha mar belementunk az oop php-be, akkor en is kerdeznek egyet. valahol azt hallottam (olvastam), hogy a magikus __call() al lehet fuggvenyt tulterhelni (amit egyebkent a php-ban azthiszem nem lehet).
a kerdesem az, hogy ezt szoktatok-e hasznalni? egyatalan lehet-e ilyet? (vagy csak en emlekszem rosszul)some men just wanna watch the world burn...
-
Sk8erPeter
nagyúr
válasz Sk8erPeter #6395 üzenetére
Korrigálnám magam annyiból, hogy tulajdonképpen valamilyen szinten mégiscsak "létrehoz" dinamikusan függvényeket a PHP, a lényeg:
http://php.net/manual/en/language.oop5.overloading.php
"Overloading in PHP provides means to dynamically "create" properties and methods. These dynamic entities are processed via magic methods one can establish in a class for various action types.The overloading methods are invoked when interacting with properties or methods that have not been declared or are not visible in the current scope. The rest of this section will use the terms "inaccessible properties" and "inaccessible methods" to refer to this combination of declaration and visibility.
All overloading methods must be defined as public."
Mellesleg most látom, hogy tulajdonképpen Tele von Zsinór már korábban leírta tömörebben a lényeget.
Na sebaj, elmondtam másféleképpen.---
(#6396) j0k3r!: pont a fentebb linkelt oldalon mutatják be a __call használatát!
Sk8erPeter
-
Tele von Zsinór
őstag
válasz Sk8erPeter #6395 üzenetére
Remek leírás, szép
@j0k3r!: a __call megkapja, milyen nevű függvényt akarsz meghívni és milyen paraméterekkel - aztán függvényen belül eldöntöd, mit akarsz ezekkel az adatokkal kezdeni. Valóban el lehet érni, hogy kívülről úgy nézzen ki, mintha túlterhelted volna, de ez nem változtat azon, hogy a php nem képes overloadingra. Default paraméterekkel lehet trükközni, de a gyenge típusosság miatt (egyelőre) nincs jobb.
@Speeedfire: akkor nézzük sorról sorra:
if(!array_key_exists($tulajdonsagnev, $this->_tulajdonsagok)) {
throw new Exception('Ervenytelen tulajdonsag-érték!');
}
if(method_exists($this, $tulajdonsagnev. 'Lekerdezes')) {
return call_user_func(array($this, $tulajdonsagnev . 'Lekerdezes'));
}
else {
return $this->_tulajdonsagok[$tulajdonsagnev];
}Van olyan tulajdonság amit be akar állítani? Ha nincs, akkor bizony hiba, és kész vagyunk.
Van olyan függvény, hogy "tulajdonságnévLekerdezes"? Ha igen, meghívjuk, és visszaadjuk, amit visszaad. Ha pedig nincs, akkor a tömb megfelelő indexű elemét adjuk vissza.A beállítás ezzel analóg logikával működik, csak ott nem visszaad, hanem beállít, és így a call_user_func() függvénnyel paramétert is átad.
[ Szerkesztve ]
-
j0k3r!
senior tag
Sk8erPeter es Tele von Zsinór koszonom szepen.
some men just wanna watch the world burn...
-
Speeedfire
nagyúr
válasz Sk8erPeter #6395 üzenetére
Sk8erPeter & Tele von Zsinór: Köszönöm mindkettőtöknek, így utólag belegondolva pedig logikus és érthető is a dolog, nem értem miért nem értettem meg eddig.
Úgy néz ki nálam a hülyülés már korábban kezdődik mint kellene...Fotóim https://fb.com/toth.szabolcs.art || IG: http://instagram.com/_tothszabolcs_ || Weblapom http://szabolcs-toth.com
Új hozzászólás Aktív témák
- ASZTALI GÉP / ALKATRÉSZ beárazás
- Lightyear - befektetési app
- Asztalos klub
- Kerékpárosok, bringások ide!
- World of Tanks - MMO
- Politika
- sziku69: Fűzzük össze a szavakat :)
- Fejhallgató erősítő és DAC topik
- Kapnak egy rakás reklámot a Roblox játékosai
- NVIDIA GeForce RTX 4080 /4080S / 4090 (AD103 / 102)
- További aktív témák...
- Panasonic Lumix DC-G9 (V-Log L kiegészítéssel, 4 akkuval)
- Commlite CM-EF-NEX Auto-Focus Adapter (Canon EF - Sony E)
- Üzletből, garanciával, legújabb Asus Vivobook 17" i7-1355U 10 mag 5GHz/16RAM/1TBSSD/17,3"FULLHD
- Üzletből, garanciával DeLL XPS 15 9500 i7-10750H 32GBRAM 1TBSSD/GTX1650Ti 15,6"4KTOUCH
- i5 12400f 3070 gamer pc
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen