• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

魔术方法__get()实例详解(php面向对象高级教程2)

php 搞代码 4年前 (2022-01-22) 23次浏览 已收录 0个评论

看到这个名字,是不是有种很高级的感觉。没错,魔术方法确实很高级。

那么,什么是魔术方法呢?

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

*本文来@源gao@daima#com搞(%代@#码@网2

搞代gaodaima码

如果希望PHP调用这些魔术方法,首先必须在类中定义,否则PHP不会执行未创建的魔术方法。

注意:

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

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

__get()的作用为:

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

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

<?phpclass 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()了。看下面的代码:

<?phpclass 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不存在。所以我们要先进行判断。

以上就是魔术方法__get()实例详解(php面向对象高级教程2)的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:魔术方法__get()实例详解(php面向对象高级教程2)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址