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
