[php] oszukac isset()

0

dajmy na to, ze mamy taka prosta klase:

class klasa
{
    $zmienne['zmienna'] = 'wartosc';
    function __get($name) {
        return $this->zmienne[$name];
    }
}

i teraz sobie ktos wywoluje np echo $klasa->zmienna to zostanie wyswietlony napis 'wartosc', ale np gdy bede chcial sobie sprawdzic:

if (isset($klasa->zmienna)) echo 'tak';

to wartosc logiczna z tego warunku to falsz :/
jest jakis sposob, zeby to zmienic?

0

if(method_exists($klasa, 'zmienna')) -- o to chodzi?

//edit: hm, jednak po przyjrzeniu się kodowi, widzę, że chyba nie to...

0

Od PHP 5.1.0 można przeładować też __isset() i __unset()

Poza tym poczytaj sobie ;)
http://pl.php.net/manual/pl/language.oop5.overloading.php

//edit:
Proponuję w kodzie małą poprawkę:

class klasa
{
    $zmienne['zmienna'] = 'wartosc';
    function __get($name) {
        return isset($this->zmienne[$name]) ? $this->zmienne[$name] : null;
        //albo return @$this->zmienne[$name];
    }
}

Jeśli w tablicy $zmienne nie ma indeksu $name nie dostaniesz błędu typu notice

0

dzieki, tak czulem, ze musi byc cos takiego jak __isset() ;)
co do poprawki: tak, tak wiem, ten moj kod byl tylko dla uproszczenia zeby zobrazowac o co mi chodzi. ale w kazdym razie dzieki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1