魔术方法__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

原文地址:https://www.cnblogs.com/furuihua/p/12156020.html

时间: 2024-07-30 12:41:08

魔术方法__get()的相关文章

PHP 对象 魔术方法 __get __set __isset __unset

class Person{     private $age = 20;     private $sex = 'male';     //__get()自动调用,是在直接访问私有成员时,自动调用!一个参数 属性值     function __get($value){         return $this->$value;     }     //__set()自动调用,是在直接设置私有属性值时,一个参数是属性名,一个参数是属性值     function __set($name,$val

魔术方法__get()和set函数

基本介绍 1.当去使用可访问的属性时,系统就会调用__get方法    不可访问属性:该属性不存在   直接访问protected或private属性 2.当去给不可访问属性赋值时,会调用__set方法 <?php header('content-type:text/html;charset=utf-8'); class human{ public $name; protected $food; function __construct($name,$food){ $this->name=$n

详解php的魔术方法__get()和__set()

先看看php官方文档的解释:__set() is run when writing data to inaccessible properties.__get() is utilized for reading data from inaccessible properties. 究竟用中文怎么翻译呢?inaccessible :n. 难达到:难接近:无法理解.有代码有真相: <?php error_reporting(E_ALL); class stu{ private $a; private

PHP 魔术方法 __get __set (二)

慢慢长寻夜,明月高空挂 __get() - 读取不可访问属性的值时,__get() 会被调用 __set() - 在给不可访问属性赋值时,__set() 会被调用 <?php /** * 清晰的认识__get() __set() */ class Example { //公有的属性 public $public = 'pub' ; //受保护的 - 子类中该属性可用 protected $protected = 'pro'; //私有的 - 只能此类使用此属性 private $private

php 魔术方法__get()和__set()理解

__get()方法,官方手册上是这样解释的 : ' 当调用(自己加的:或设置|赋值)当前环境下未定义或不可见的类属性或方法时,重载方法会被调用.本节后面将使用"不可访问属性(inaccessible properties)"和"不可访问方法(inaccessible methods)"来称呼这些未定义或不可见的类属性或方法'.'未定义'容易理解.我们知道类权限控制有三个关键字分别是'public','private','protected',其中除了'public'

php -- 魔术方法 之 获取属性:__get()

属性重载:当访问一个不存在或者权限不够的属性的时候,能够触发一系列的魔术方法,就叫做属性重载 __get():获取不存在或者权限不够的属性的时候会自动触发 <?php header('Content-type:text/html;charset=utf-8'); echo '<pre>'; //PHP属性重载 class Person{ //属性 public $name; protected $money; private $age; //构造方法 public function __

PHP面向对象魔术方法之__get 和 __set函数

l 基本的介绍 (1) 当我们去使用不可以访问的属性时,系统就会调用__get方法. (2) 不可以访问的属性指的是(1 . 该属性不存在 2. 直接访问了protected或者private属性) (3) 当程序员去给不可以访问的属性直接赋值,系统就会调用__set方法 l 举例说明 需求是: 如果对象有一个成员变量是private.protectd的,我希望在在类的外部通过 : $对象名->变量名的方式来赋值和取值,怎么办? 代码如下 <?php header('content-type:

php中常用到的魔术方法

PHP面向对象中有很多功能很强大,不得不说的就是魔术方法了.今天抽出时间记录几个比较常用的魔术方法: 1.__construct 这是构造函数,指当一个类被实例化的时候就会自动调用的函数.那我们可以在这里初始化变量的值.例如: class Score { public $chinese; public $english; public $math; public function __construct($chinese=100,$english=99,$math=98) { $this->ch

PHP魔术方法和魔法变量详解

一.魔术常量 __LINE__ 文件中的当前行号.__FILE__ 文件的完整路径和文件名.如果用在被包含文件中,则返回被包含的文件名. 自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径), 而在此之前的版本有时会包含一个相对路径.__DIR__ 文件所在的目录.如果用在被包括文件中,则返回被包括的文件所在的目录. 它等价于 dirname(__FILE__).除非是根目录,否则目录中名不包括末尾的斜杠.__FUNCTION__ 函数名称(