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

Cevap