Maison  >  Article  >  Le site Web chinois PHP vous montre les méthodes de construction PHP et le contrôle d'accès

Le site Web chinois PHP vous montre les méthodes de construction PHP et le contrôle d'accès

无忌哥哥
无忌哥哥original
2018-06-28 14:23:361728parcourir

* Méthode de construction et contrôle d'accès (demandeur et setter)

* Méthode de construction :

* 1. Nom de la méthode fixe : __constructor()

* 2 .Fonction : Déclare les opérations qui doivent être effectuées automatiquement lors de la création d'un objet, comme l'initialisation des propriétés de l'objet ou l'appel automatique de méthodes dans la classe

* 3. Une classe standardisée doit avoir et ne peut avoir qu'un seul constructeur

* Supplément : Les méthodes commençant par des doubles traits de soulignement sont appelées méthodes magiques. Par rapport aux méthodes ordinaires :

* 1. Différents appelants : directement appelés par l'objet, l'utilisateur n'a aucune autorisation

* 2. Les scénarios d'appel sont différents : il ne peut être appelé que dans des scénarios spécifiques, et il est automatiquement appelé

* Les scénarios courants qui déclenchent des appels de méthode magique sont :

* 1. Initialisation de l'objet ; 2. Requête et paramétrage des attributs d'objet ; 3. Clonage d'objet ; 4. Sérialisation d'objet ; 6. Autres scénarios...

* Si un constructeur est déclaré dans la classe, alors le attributs Il n'est pas nécessaire d'initialiser lors de la déclaration

* Vous vous demandez peut-être, puisque l'initialisation n'est plus nécessaire, pourquoi devez-vous donner à $name une chaîne vide, $age est 0 et $stature est une chaîne vide array?

* La raison est la suivante : PHP est un langage faiblement typé. Actuellement, les tableaux et les objets prennent déjà en charge les indications de type, mais les scalaires, tels que les chaînes, et les types numériques ne sont toujours pas pris en charge. > * Donnez donc à l'attribut une valeur représentative. La valeur initiale du type peut servir d'indice de type.

* *

En dehors de la classe, les attributs de classe sont. initialisé directement par affectation

* Par conséquent, il n'est pas nécessaire que les attributs de la classe soient directement obtenus de l'extérieur. Pour des raisons de sécurité et de nécessité d'encapsulation des données, les attributs de classe ne doivent pas être autorisés. Accès direct externe

* Utilisez le mot-clé private pour modifier les attributs de la classe

* private : accessible uniquement au sein de cette méthode de classe, et non accessible par des externes ou des sous-classes

* Si les attributs de la classe sont privés, alors une interface d'accès doit être fournie au monde extérieur

* Cette interface est implémentée via des méthodes de classe et le contrôle d'accès est public, c'est-à-dire qu'il est accessible depuis en dehors de la classe

* Oui Dans la méthode d'interface, la détection nécessaire est effectuée sur l'accès externe pour garantir que la demande est légale et que les données sont sûres et significatives

* Pour requête externe (lecture) opérations, définissez la méthode de requête pour résoudre le problème

* Le nom de la méthode de requête recommandée est : get+nom de l'attribut, mettez en majuscule le premier caractère du nom de l'attribut et utilisez la dénomination en casse chameau

* Les requêteurs n'ont généralement pas besoin de transmettre des paramètres. Si des paramètres sont transmis, il s'agit généralement de conditions de requête** *

class GirlFriend2 
{
    //类属性:$name 姓名
    public $name = '';
    private $name = '';
    //类属性: 年龄
    public $age = 0;
    private $age = 0;
    
    //类属性: 身材三维stature['stætʃə]: 胸,腰,臀
    public $stature = [];
    private $stature = [];
    //声明构造方法
    public function __construct($name,$age, array $stature) {
        //初始化类成员属性
        $this->name = $name;
        $this->age = $age;
        $this->stature = $stature;
    }
      //查询器: getName() 获取女友姓名
   public function getName()
   {   
       //返回当前对象的name属性值
       return $this->name;
   }
    
    // 通过查询器限制非法用户对类属性的访问
   public function getName($yourName='')
   {
       if (!empty($yourName) && $yourName != '西门大官人' ) {
           return $this->name;
       }
       return '非法访问';
   }
    
    //一个方法中,尽可能只用一个return,否则会警告return语句过多,建议做如下修改
    //添加一个临时变量,这样可确保方法内只会一个return语句
    public function getName($yourName='')
    {
        //创建方法内部变量(局部变量),用来保存要返回的信息
        $msg = '非法访问';
        if (!empty($yourName) && $yourName != '西门大官人' ) {
            $msg = $this->name;
        }
        return $msg;
    }
    
    //下面对年龄和三维的访问,你也可以通过对姓名的限制方式进行访问控制
    //查询器: getAge() 获取女友年龄
    public function getAge()
    {   
        //返回当前对象的age属性值
//        return $this->age;
        //下面是改写一下当前方法,加入一些逻辑判断,仅做演示,实际功能自己扩展
        $msg = $this->age;
        if ($msg >= 50) {
            $msg .= ', 口味够重呀,大兄弟~~';
        } elseif ($msg < 18) {
            $msg .= &#39;, 未成年呢,求放过~~&#39;;
        }        
        return $msg;
    }
    
    //查询器: getStature() 获取女友身材信息
    public function getStature()
    {
        //返回当前对象的$stature属性值
        return $this->stature;
    } 
    
    
    /**
     * 设置器:也叫修改器,允许外部修改类的属性值
     * 参数一般有二个: 属性名与新的属性值
     * 因为属性名在方法中已经指定,这里只需要传入一个新的属性值即可
     */
    //下面通过设置器来控制对类属性的修改操作
    public function setName($value=&#39;&#39;)
    {
        return $this->name = $value;
    }
    
    //设置器更多的应用场景是会属性值进行过滤检测,例如年龄的范围
    public function setAge($value)
    {
        //年龄必须在18~120之间
        if (in_array($value,range(14,120))){
            $this->age = $value;
        }
    }
}

.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn