Olayı Elvin'le analiz ettik aslında __set veya __get normal diğer methodlar gibi
override olmuyor daha çok override ettiğimiz olay exception durumları.

yani a->olmayanDegisken=5;
durumunda override ettiğiniz __set çalışıyor çünkü a sınıfında olmayanDegisken
isminde bir öğe mevcut değil

aynı şekilde

$durum = a->olmayanDegisken;
durumunda da override ettiğimiz __get çalışıyor.

yaniaslında bu method isimlerinin __get veya __set yerine
__get_notFound __set_notFound olması daha mantıklı olurmuş.

Hepinize Kolay Gelsin

2009/8/27 Elvin Şiriyev <[email protected]>:
> Aslında olay şöyle (bende yeni farkına vardım):
>
> __set() is run when writing data to inaccessible members.// tanımlanmamış
> (erişilemeyen) değişkenler yazılırken çalışır
>
> __get() is utilized for reading data from inaccessible members. .//
> tanımlanmamış (erişilemeyen) değişkenler yazılırken çalışır
>
> daha önce gönderdiğim örnekte set'in çalışıp get in çalışmamasının nedeni de
> get'in set de değişken tanımlandıktan sonra "erişilemeyen" tanımlamasından
> çıktığı içindir.
>
> Kaynak: http://www.php.net/manual/en/language.oop5.overloading.php
>
> 2009/8/27 Elvin Şiriyev <[email protected]>
>>
>> <?php
>> class Araba {
>>     public function __set($degisken, $deger){
>>         $this->$degisken = $deger;
>>     }
>>     public function __get($degisken){
>>         return $this->$degisken;
>>     }
>> }
>>
>> $a = new Araba();
>> $a->sorun = '$this->degisken değil gerçekten $this->$degisken';
>> echo $a->sorun;
>>
>>
>> 2009/8/27 Ömer F. USTA <[email protected]>
>>>
>>> malesef işe yaramadı.
>>> sanki __set ve __get hiç override olmuyor gibi
>>>
>>> 2009/8/27 Mecid UYSAL <[email protected]>:
>>> > Kusura bakma esittire 2 defa basmisim ;)))
>>> >
>>> >
>>> >        public function __set($degisken, $ degeri) {
>>> >                $this->$degisken = $degeri;
>>> >        }
>>> >
>>> >        public function __get($degisken) {
>>> >                return $this->$degisken;
>>> >        }
>>> > Seklinde deneyiniz.
>>> >
>>> >
>>> > Bu sekilde deneyiniz. PHP de classlarda degiskenlere erisirken
>>> > "$this->degisken" seklinde erisirsiniz.
>>> >        Class disindanda;
>>> >                $obje = new Class;
>>> >                $obje->degisken;
>>> > Seklinde erisirsiniz.
>>> >
>>> >
>>> > -----Original Message-----
>>> > From: [email protected]
>>> > [mailto:[email protected]] On Behalf Of Ömer
>>> > F.
>>> > USTA
>>> > Sent: Thursday, August 27, 2009 8:49 AM
>>> > To: Özgür yazılımlarla çeşitli dillerde yazılım geliştirme
>>> > Subject: [Linux-programlama] Re: [php (5.3.0)] Override problemim (
>>> > __get /
>>> > __set )
>>> >
>>> > merhaba
>>> > bunun mantığını anlayamadım ben karşılaştırma yapmıyorum ki ?
>>> > Ayrıca $this->$degisken  değilde o $this->degisken olması gerekiyordu
>>> > galiba.
>>> > ben kod içerisinde nesnemdeki bir public değişkenin değeri değişince
>>> > öncelikle değişti yazısını yazdırıp sonra normal atama işlemini yapmak
>>> > istiyorum
>>> > yani == ile eşitlik kontrolünü neden yaptınız ?
>>> >
>>> > 2009/8/27 Mecid UYSAL <[email protected]>:
>>> >>        function __set($degisken,$degeri){
>>> >>                echo("<br>Verin olan ".$degisken." e ".$degeri."
>>> >> verisini
>>> >> yerleştirdim<br>");
>>> >>                //$degisken=$degeri;
>>> >>
>>> >>                // Yukardaki satiri bu sekilde degistirirsen hatan
>>> >> duzelecektir..
>>> >>                $this->$degisken = =$degeri;
>>> >>        }
>>> >>
>>> >> Kolay gelsin...
>>> >>
>>> >>
>>> >>
>>> >>
>>> >> -----Original Message-----
>>> >> From: [email protected]
>>> >> [mailto:[email protected]] On Behalf Of
>>> >> Ömer F.
>>> >> USTA
>>> >> Sent: Thursday, August 27, 2009 5:32 AM
>>> >> To: Özgür yazılımlarla çeşitli dillerde yazılım geliştirme
>>> >> Subject: [Linux-programlama] [php (5.3.0)] Override problemim ( __get
>>> >> /
>>> >> __set )
>>> >>
>>> >> Merhabalar
>>> >> php tarafındaki oop eksikliklerimi gidermek için örnekler yazarak
>>> >> eksiğimi gidermeye çalışırken şöyle bir sorunla karşılaştım:
>>> >>
>>> >> __get ve __set fonksiyonlarını Override etmeme rağmen php bunu
>>> >> yoksayıyor.
>>> >> Acaba nerede hata yapıyorum :
>>> >>
>>> >> Araba.php dosya içeriği :
>>> >>
>>> >> <?php
>>> >>
>>> >> class Araba {
>>> >>        protected $calisiyorMu = false;
>>> >>        protected $marka = "";
>>> >>        public $deger1 = 100;
>>> >>
>>> >>        function __construct($MarkaAdi) {
>>> >>                $this->calisiyorMu = true;
>>> >>                $this->marka=$MarkaAdi;
>>> >>        }
>>> >>
>>> >>        function calistir() {
>>> >>                $this->calisiyorMu=true;
>>> >>        }
>>> >>
>>> >>        function durdur() {
>>> >>                $this->calisiyorMu=false;
>>> >>        }
>>> >>
>>> >>        function __toString(){
>>> >>                return "Bu Araba : ". $this->marka ." Markadir.";
>>> >>        }
>>> >>
>>> >>        function __get($degisken){
>>> >>                echo("<br>Talepte Bulunduğun verinin değeri:
>>> >> ".$degisken."<br>\n");
>>> >>                return $degisken;
>>> >>        }
>>> >>
>>> >>        function __set($degisken,$degeri){
>>> >>                echo("<br>Verin olan ".$degisken." e ".$degeri."
>>> >> verisini
>>> >> yerleştirdim<br>");
>>> >>                $degisken=$degeri;
>>> >>        }
>>> >>
>>> >>        function durum() {
>>> >>                return $this->calisiyorMu;
>>> >>        }
>>> >>
>>> >>        function __destruct()
>>> >>        {
>>> >>                echo "gitttiiiiii gittti gül gibi $this gitti.";
>>> >>        }
>>> >>
>>> >> }
>>> >>
>>> >>
>>> >> **************************************************************************
>>> >> index.php dosya içeriği :
>>> >>
>>> >> <?php
>>> >> function __autoload($class_name) {
>>> >>    require_once $class_name . '.php';
>>> >> }
>>> >>
>>> >> echo("yeni arabam :\n<br>");
>>> >> $arabam = new Araba("Serçe");
>>> >> echo ($arabam." <br>");
>>> >>
>>> >> echo ("<br> *****************<br>");
>>> >> echo ("Çalışıyor mu : <br>");
>>> >> echo ($arabam->durum() ? "Çalışıyor : )":"Durmuş :(" );
>>> >>
>>> >> echo ("<br> *****************<br>");
>>> >> $arabam->durdur();
>>> >> echo ("Çalışıyor mu : <br>");
>>> >> echo ($arabam->durum() ? "Çalışıyor : )":"Durmuş :(" );
>>> >>
>>> >> echo ("<br> *****************<br>");
>>> >> $arabam->calistir();
>>> >> echo ("Çalışıyor mu : <br>");
>>> >> echo ($arabam->durum() ? "Çalışıyor : )":"Durmuş :(" );
>>> >>
>>> >> echo ("<br> *****************<br>");
>>> >> echo ("get/set overload testim:<br>");
>>> >> echo ($arabam->deger1);
>>> >> $deneme = $arabam->deger1;
>>> >> $arabam->deger1=500;
>>> >>
>>> >> echo ("<br> *****************<br>");
>>> >> $arabam =0;
>>> >> echo ("<br> *****************<br>");
>>> >>
>>> >> ?>
>>> >>
>>> >>
>>> >>
>>> >
>>> > ****************************************************************************
>>> >> *****
>>> >>
>>> >> Çıktı :
>>> >>
>>> >> yeni arabam :
>>> >> Bu Araba : Serçe Markadir.
>>> >>
>>> >> *****************
>>> >> Çalışıyor mu :
>>> >> Çalışıyor : )
>>> >> *****************
>>> >> Çalışıyor mu :
>>> >> Durmuş :(
>>> >> *****************
>>> >> Çalışıyor mu :
>>> >> Çalışıyor : )
>>> >> *****************
>>> >> get/set override testim:
>>> >> 100
>>> >> *****************
>>> >> gitttiiiiii gittti gül gibi Bu Araba : Serçe Markadir. gitti.
>>> >> *****************
>>> >>
>>> >>
>>> >> burada ki çıktıda get / set override testim kısmında Eksiklikler
>>> >> mevcut
>>> >> beklentim şu şekilde çıktı vermesi yönündeydi :
>>> >>
>>> >> Talepte Bulunduğun verinin değeri: 100
>>> >> 100
>>> >> Talepte Bulunduğun verinin değeri: 100
>>> >> Verin olan 100 e 500 verisini yerleştirdim
>>> >>
>>> >> fakat bir yerde ben veya php hata yapıyoruz.
>>> >> Şimdiden teşekkürler
>>> >>
>>> >> Saygılarılma
>>> >> ömer
>>> >>
>>> >>
>>> >> --
>>> >> Ömer Fadıl USTA
>>> >> http://www.bilisimlab.com/
>>> >> _______________________________________________
>>> >> Linux-programlama mailing list
>>> >> [email protected]
>>> >> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>> >>
>>> >> _______________________________________________
>>> >> Linux-programlama mailing list
>>> >> [email protected]
>>> >> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>> >>
>>> >
>>> >
>>> >
>>> > --
>>> > Ömer Fadıl USTA
>>> > http://www.bilisimlab.com/
>>> > _______________________________________________
>>> > Linux-programlama mailing list
>>> > [email protected]
>>> > http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>> >
>>> > _______________________________________________
>>> > Linux-programlama mailing list
>>> > [email protected]
>>> > http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>> >
>>>
>>>
>>>
>>> --
>>> Ömer Fadıl USTA
>>> http://www.bilisimlab.com/
>>> _______________________________________________
>>> Linux-programlama mailing list
>>> [email protected]
>>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>
>>
>>
>> --
>> Elvin Şiriyev
>> http://siriyev.net
>
>
>
> --
> Elvin Şiriyev
> http://siriyev.net
>
> _______________________________________________
> Linux-programlama mailing list
> [email protected]
> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>
>



-- 
Ömer Fadıl USTA
http://www.bilisimlab.com/
_______________________________________________
Linux-programlama mailing list
[email protected]
http://liste.linux.org.tr/mailman/listinfo/linux-programlama

Cevap