PHP kilitleme sınıf üyeleri

3 Cevap php

Eğer bir sınıf tanımlamak, ve daha sonra bu sınıfın bir nesne örneğini eğer PHP, daha sonra keyfi olarak bu sınıfa yeni üyeler eklemek mümkün. Örneğin:

class foo {
    public $bar = 5;
}

$A = new foo;
$A->temp = 10;

Ancak, imkansız yeni üyelere bu şekilde eklemek yapmak için yeteneği istiyorum. Temelde ben sınıf SADECE tanımında belirtilen üye olmasını istiyorsanız; Eğer herhangi bir diğer üyeleri ayarlamaya çalışırsanız, o hataları ölümcül. Burada niyet Ben özelliklerinin çok özel bir set gibi bir sınıf tanımlamak, ve sınıf içeriği iyi tanımlanmış ve her üyesinin değerleri (daha sonra değiştiremezsiniz, böylece sadece bu özellikleri, sınıfın var emin olmak istiyoruz ki ) üyeleri kendilerini değiştirmek, ama olamaz.

Ben Sesimin her define olabilir, ancak ben (__ set yöntemi ile yapabilirsiniz gerçekleştirmek, ve zaten var olmayan bir üyesini belirlemek için çalışırsanız, sadece o ölümcül hata var, ama bu her sınıf tanımı eklemek zorunda sinir bozucu sınıflar bu yöntemle bir temel sınıf genişletmek için, ama bu) aynı zamanda sinir bozucu. Örneğin:

class foo {
    public $bar = 5;

    private function __set($var, $val) {
        trigger_error("Cannot dynamically add members to a class", E_USER_ERROR);
    }
}

Bunu yapmak için başka bir (tercihen daha uygun) bir yolu var mı? Kenara bu davranışı engellemek için PHP'nin kendisi değiştirerek mi?

3 Cevap

Henüz - Hayır __set bir taban sınıfta daha iyi bir yol yoktur. Bu bilinen bir sorundur ve planned to be addressed in the future:

Dinamik özellik kurulmasına izin yok "sıkı sınıflar" kavramını tanıtmak

Nop, sadece __ ayarlayın. Belki her yerde tekrar tekrar yazmamak için devralma kullanabilirsiniz.

Ben bunu yapmak gerekir neden sormak gerekir? Bir üye atanır ve eğer bu yöntemleri etkilemez yok, ve bu özel eğer bir hata atmak olacaktır. Peki neden bunu yapmak gerekiyor, ya da ben tamamen soru oynanırsa mi?