re: tenegriKöszönöm a kimerítő válaszokat :)
re: tenegriKöszönöm a kimerítő válaszokat :)
re: robkaq2 Persze, kevesebbet kell írni és gondolkodni a programíráskor, meg lehet durr-bele alapon nekiugrani :) Meg persze eredetileg bizonyára az értelmezőt is egyszerűbb volt elkészíteni hozzá. A laza típuskezelés kényelmes tud lenni, ha gyorsan akarsz összedobni vmi egyszerűt, de a méret és az összetettség növekedésével a hátrányai is egyre jelentősebbek. A kezdeti kevesebb odafigyelésnek később nagyon is sok odafigyelés az ára. Kilógni annyira nem lóg ki, a scriptnyelvek többsége lazán típusos.
re: tenegri Ejjha :) Van ennek php-s típustalanságnak valami előnye? :) Mintha kilógna a sorból.
re: robkaq2 Igazából type castingnak kétféle dolgot is szoktak nevezni, a típusátalakítást (ez lehet még type conversion) és a típuskényszerítést (ez lehet még type forcing), viszont objektumhivatkozásoknál az előbbinek eleve korlátozott értelme van (van, de ritkán), inkább az utóbbi a fontos. A típuskényszerítés végül is az, amikor egy adatot más típusúként szeretnél használni, anélkül, hogy az adatábrázolás módján változtatnál, míg a típuskonverzió az lenne, mikor egy adatot szintén más típusúként használnál, de az adatábrázolás módját is megváltoztatod. Az utóbbira példa, ha mondjuk számot alakítasz szöveggé, szövegek számmá, stb. - ilyenkor az átalakítás után más lesz a ténylegesen tárolt adat. A típuskényszerítésnél az adat maga nem változik, csak az értelmezése. Pl. a "12" karaktersorozatot (tárolt bájtok: h31 és h32) típuskonverzióval mondjuk 16 bites egész számmá alakítva decimális 12-t kapunk eredményül (tárolt bájtok h00 és h0C), de ugyanilyen típusú számként értelmezve az eredeti adatot az eredmény már decimális 12549 vagy 12849 lenne (a gép bájtsorrendjétől függően). De ez utóbbit mondjuk ilyen elemi típusoknál nemigen szokták használni (ehhez eleve mutatókat kellene használnia a nyelvnek, az meg pl. PHP-ban nincs - mondjuk C-ben lehetne), hanem többnyire típuskonverziót alkalmaznak. A típuskényszerítésnek leginkább objektumhivatkozásoknál van értelme, (ilyenkor pl. egy X osztályú objektum hivatkozását Y osztályúként értelmezed), de csak akkor, ha az adott nyelv végez futásidő előtti típusellenőrzést és a változók is típusosak (a PHP-ra leginkább egyik sem igaz). Egy változó típusa meghatározza a fordító számára, hogy a benne tárolt adattal mit lehet csinálni és mit nem. Az objektumhivatkozást tároló változóknál pl. azt, hogy az objektum mely elemeit (tulajdonságok, metódusok) érheted el, s melyeket nem (mert nem léteznek a típus alapján). De OO ismereteink alapján tudjuk, hogy egy leszármazott objektum örökli az őse minden elemét, s felhasználható azokon a helyeken, ahol az őse. Azaz ha Y osztály X osztályból származik, akkor a hivatkozása tárolható X típusú változóban, de ilyenkor a változó típusa miatt a fordító X típusúként kezeli, azaz csak az X által definiált elemeket véli hozzáférhetőnek (jogosan, mert lehetne abban a változóban ténylegesen egy X osztályú objektum hivatkozása is). De előfordul, hogy te tudod, hogy ebben a változóban Y osztály objektumhivatkozás van, s szeretnél hozzáférni Y elemeihez is, s ilyenkor használhatsz típuskényszerítést, s mondhatod, hogy márpedig tessék ezt most úgy kezelni, mintha Y lenne, mert szerinted valójában az. És ha tényleg az, akkor működik - ha meg rosszul tudtad és mégsem Y, akkor nem működik és jó esetben jön egy futásidejű hiba, ami jelzi ezt. Mivel PHP-ben nincs a változóknak típusa, előre nem lehet tudni mi kerül majd beléjük, s csak futásidőben derül ki, hogy a változóban tárolt adattal végzett művelet végrehajtható-e vagy sem. Mivel nincs típusinformáció, nincs előzetes ellenőrzés sem, ami akadályozna benne, hogy bármit tegyél egy adattal (pl. egy objektumhivatkozásnál meghívd a W metódust - aztán vagy sikerül, mert van neki olyanja vagy nem, mert nincs), nincs szükség a típuskényszerítésre sem, ami egy ilyen ellenőrzés eseti feloldását és megkerülését célozza. Uff, kicsit hosszú lett, bocsi :)
re: tenegri köszi :) amúgy a típuskényszerítést hivatalosan mire találták ki?
re: robkaq2 Minthogy PHP-ban a futásidő előtti típusellenőrzés szinte teljes hiánya miatt értelme sincs a típuskényszerítésnek (casting), így ilyen nincs is benne :)
Sziasztok!
Egy kényelmi ok miatt érdeklődöm, hogy megoldható -e ez valahogyan php-ban. Ugye javaban, c-ben, vagy as-ben lehet változót castolni, de php-ben még nem találkoztam ezzel. Szükségem azért lenne rá, mert aptanaban kódolok php-t és nagyon jó a kódkiegészítője, de nem működik abban az esetben, ha pl. foreach-el végigmegyek egy tömb elemein, amelyek egy osztálynak egy-egy példányai. Logikus, nem is kell tudnia, hogy azok milyen osztályhoz tartoznak, de talán egy castolással el lehetne mondani neki :)
A beküldéshez be kell jelentkezni.