PHP 魔术方法 __get __set (二)

慢慢长寻夜,明月高空挂

__get()  - 读取不可访问属性的值时,__get() 会被调用

__set()  - 在给不可访问属性赋值时,__set() 会被调用

<?php

/**
 * 清晰的认识__get() __set()
 */
class Example {

    //公有的属性
    public $public = ‘pub‘ ;
    //受保护的 - 子类中该属性可用
    protected $protected = ‘pro‘;
    //私有的 - 只能此类使用此属性
    private $private = ‘pri‘;

    //当访问对象中的属性不存在或者非公有属性的时候自动加载__get()方法
    public function __get($name){
        return ‘调用__get()方法:‘.$name;
    }

    //当给对象的一个属性赋值的时候如果该属性不存在或者是非公有属性则自动加载__set()方法
    public function __set($name,$value){
        echo "\nname:".$name.‘,value:‘.$value."\n";
    }
}

$example = new Example;
echo ‘<pre>‘;
echo $example->public."\n";
echo $example->protected."\n";
echo $example->private."\n";
echo $example->other."\n";
echo ‘<hr>‘;
$example->public = ‘lic‘;   //这个赋值成功所有没有显示
$example->protected = ‘tec‘;
$example->private = ‘vat‘;
$example->other = ‘er‘;
echo ‘<br/>‘;
echo ‘打印 public 属性:‘.$example->public;
 

结果如下:

pub
调用__get()方法:protected
调用__get()方法:private
调用__get()方法:other

name:protected,value:tec

name:private,value:vat

name:other,value:er

打印 public 属性:lic
时间: 2024-08-06 20:51:42

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

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()

什么是魔术方法呢? 在PHP中以两个下划线开头的方法,被称为"魔术方法"(Magic methods).比如之前讲过的__construct(), __destruct (), __clone(),以及__call(),,__get(), __set(),__sleep(), __wakeup(), __toString(), __autoload()等,都是魔术方法. 如果希望PHP调用这些魔术方法,首先必须在类中定义,否则PHP不会执行未创建的魔术方法.大理石构件来图加工 注意:

PHP常用魔术方法(__set、__get魔术方法:)

__set.__get魔术方法: //文件名:Object.php <?phpnamespace IMooc;class Object{ protected $array = array(); function __set($name, $value)//set魔术方法 { var_dump(__METHOD__);//输出当前方法 $this->array[$name]=$value;//$name=title,$value="哎哟喂" } function __get(

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

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

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

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

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魔术方法和魔法变量详解

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