• 魔术方法__get()


    什么是魔术方法呢?

    在PHP中以两个下划线开头的方法,被称为"魔术方法"(Magic methods)。比如之前讲过的__construct(), __destruct (), __clone(),以及__call(),,__get(), __set(),__sleep(), __wakeup(), __toString(), __autoload()等,都是魔术方法。

    如果希望PHP调用这些魔术方法,首先必须在类中定义,否则PHP不会执行未创建的魔术方法。大理石构件来图加工

    注意:

    魔术方法是php中设置好的,所以不能自己去创建,只能用php中本来就存在的,否则会报错。

    下面我们就来介绍众多魔术方法中常用的魔术方法。

    __get()的作用为:

    __get():读取不可访问属性的值(private,protected,不存在)时,php就会执行__get()方法。

    我们来看个有关__get()的实例:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    <?php

    class Monkey{

    public $name;

    protected $food;

    function __construct($name,$food){

    $this->name = $name;

    $this->food = $food;

    }

    function sayHello(){

    echo '<br/>我是' . $this->name . '我喜欢吃' . $this->food;

    }

    }

    $monkey = new Monkey('猴子' , '桃子')

    $monkey -> sayHello();

    上面的实例是我们之前说过的关于类的知识,创建类,创建方法,实例化,最后访问。

    下面我们提出一个新的需求,那就是我们要在类的外面直接调用$food。那么有人就会说了,$food是个保护的属性,是不能直接被调用的。但是需求就是要这么做,该怎么办呢?这时候就要用到我们的魔术方法__get()了。看下面的代码:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    <?php

    class Monkey{

    public $name;

    protected $food;

    function __construct($name,$food){

    $this->name = $name;

    $this->food = $food;

    }

    function sayHello(){

    echo '<br/>我是' . $this->name . '我喜欢吃' . $this->food;

    }

    //魔术方法

    function __get($pro_name){

    //先判断$pro_name是否存在

    if(isset($this -> $pro_name)){

    return $this -> $pro_name;

    }else{

    echo '属性值不存在';

    }

    }

    }

    $monkey = new Monkey('猴子' , '桃子')

    $monkey -> sayHello();

    echo '猴子喜欢吃' . $monkey -> food;

    在用魔术方法之前,我们需要先判断$pro_name是否存在。因为在上述例子中,$pro_name调用的是food,food是存在的,所以可以调用。但是如果将food换成别的不存在的,比如a,那么,__get()方法会被调用,但是会报错,说a不存在。所以我们要先进行判断。https://www.bzddrive.com/tag/xiaoxingzhixiandaogui_327_1.html

  • 相关阅读:
    剑指OFFER 滑动窗口的最大值
    剑指OFFER 正则表达式匹配
    linux动态链接库的使用
    剑指OFFER 序列化二叉树
    剑指OFFER 数字在排序数组中出现的次数
    剑指OFFER 数组中的逆序对
    剑指OFFER 反转链表
    剑指OFFER 二叉树的深度
    剑指OFFER 矩形覆盖
    网络相关的命令工具-iptables
  • 原文地址:https://www.cnblogs.com/furuihua/p/12156020.html
Copyright © 2020-2023  润新知