php nin oop kısmında süper methodlar olarak geçen __set , __get methodları var aslında oldukça pratik hızlı iş görüyorlar.
Fakat değiştirilmemesi veya okunmaması gereken değişkenler örneğin bir sınıfınızda
sifre değişkeni var bunu set edebilmek gerekebilir ama get etmek pek güvenli değil. siz bunu private yaptınız mesala __get sayesinde bu değişkene erişebilirler
diğer bir örnek temaDizini diye bir değişkeniniz var bu değişken get edilmeli ihtiyaçta olacaktır, ama set edilmemeli programın / yazılımın çalışması bozulabilir.
C# da bu olay sadece o method bazlı olarak yapılıyor ve oldukça güvenlide bir yöntem isteğe göre düzeltebiliyorsun
örnek vereyim
1 2 3 4 5 6 7 8 9 | <code style="white-space: nowrap;"><code>Private String sifre ; public String Sifre() { set { sifre = value;} } </code></code> <code style="white-space: nowrap;"><code>Private String temaDizini; public String TemaDizini() { get{ return temaDizin; } }</code></code> |
c# da bu şekilde kullanılıyor.
php de de nelerin get edilebilir nelerin set edilebileceğini pratik bir yolla şöyle yapabiliriz :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | <?php class saho { public $yetkilerSet = array('adi','soyadi','maili','sifresi'); public $yetkilerGet = array('adi','soyadi','temaDizini'); public function __set ( $varname, $value ) { try{ // yakalanmamış hata uyarısı almamak için böyle bir kullanımda yapılabilir. if(!in_array($varname,$this->yetkilerSet)) { throw new Exception("Bu islemi yapmaya yetkiniz yok<br />\n"); } else { $this->{$varname} = $value; } } catch(Exception $ex) { echo "#{$ex->getLine()} : {$ex->getMessage()}"; return false; } } public function __get ($varname) { if(!in_array($varname,$this->yetkilerGet)) { throw new Exception("Bu islemi yapmaya yetkiniz yok<br />\n"); return false; } return $this->{$varname}; } } $b = new saho(); try{ echo $b->x; } catch (Exception $ex) { echo "#{$ex->getLine()} : {$ex->getMessage()}"; } $b->x=3; ?> |
set ve get edilebilecek değişkenleri bir array da saklayıp oradan süzüyor eğer izinli listesindeyse çalışmasına devam ediyor
izinli listesinde değilse daha güvenli bir hal almış oldu
not: r10 daki bir soru üzerine r10 forumlarında cevap vermiştim göremeyenler olabilir buradan da yayınlayalım (:
















