php魔术方法__SET __GET

__SET  设置一个不可访问的属性的时候 调用_set方法

__GET 获取一个不可访问的属性的时候  调用_get 方法

<?php

class stu{
    private $a;
    private $b = 0;
    public $c;
    public $d = 0;

    //这里的 private 可以用 protected public 替代
    private function __get($name) {
        return 123;
    }

    //这里的 private 也可以用 protected public 替代
    private function __set($name, $value) {
        echo "This is set function";
    }
}

$s = new stu();
echo "<pre>";
var_dump($s->a);  //output: 123
var_dump($s->b);  //output: 123
var_dump($s->c);  //output: null
var_dump($s->d);  //output: 0
var_dump($s->e);  //output: 123

$s->a = 3;   //output: This is set function
echo "<br>";
$s->c = 3;  //no output
echo "<br>";
$s->f = 3;  //output: This is set function

看结果

时间: 2024-08-04 02:10:10

php魔术方法__SET __GET的相关文章

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

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

数据持久化、单例、重载【添加对不可访问的成员的操作】、魔术方法、类常量、static关键字对self的补充【静态延迟绑定实现$this的效果】、参数类型约束【参数前加类名】、遍历【iterator接口】、快速排序

1.数据持久化过程[传输(例如表单提交或php交互mysql)和保存过程] 使用的是字符串形式的流数据. 数据流就是为了传输[按照序列的形式进行传输] [http://baike.baidu.com/link?url=0MtUQMhFzc_EwJc09rXZV8KlfOL4jis6XNbRfmGA3rQhDcGwOp8togLVQjXBV34M] 所以将其他类型数据转化为字符串的过程也是序列化的过程 [这个概念和图片.视频的流媒体的区别?] [注意点] 另外mysql中sql语句中的某些关键词为

__get().__set.__isset,__unset魔术方法

一般来说,总是把类的属性定义为 private .这更符合现实的逻辑. 但是对属性的读取和赋值操作非常频繁的,因此在PHP中,预定义了两魔术方法 "__get()"用来获取私有成员属性值的,只有一个参数获取的属性名称. "__set()"用来为私有属性设值的,有两个参数,第一参数为属性名,第二个属性值. (用__set,不用我们手工去调用,它也可以做成私有的的,是在直接设置私有属性值的时候自动调用的,同样属性私有的已经被封装上了.) 以及检查属性的方法"__isset()"和

魔术方法__get()

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

PHP中的面向对象OOP中的魔术方法

一.什么是魔术方法: PHP为我们提供了一系列用__开头的函数,这些函数无需自己手动调用,会在合适的时机自动调用,这类函数称为魔术函数.例如: function __construct(){} 在new一个新对象时自动调用此函数 二.PHP中都有那些魔术方法,以及它们的作用:1.__construct():构造函数,new对象时自动调用 eg: class Person{ public $name; public $age; function __construct($name,$age){ $

魔术方法(部分)

PHP 将所有以 __(两个下划线)开头的类方法保留为魔术方法 之前的构造函数与析构函数也都是魔术方法 __set(): 当对类中的不能直接访问的属性赋值时,该方法被自动调用 __set不需要返回值 格式:   Function __get($name,$value) {} __get(): 在类的外部调用不能直接访问的属性时,该函数方法被自动调用 魔术方法必须是公共的,且不能定义为静态的 被访问的属性的名称,它必须是一个字符串 __get必须有返回值,所以最后结束的肯定是return语句 格式

PHP面向对象的魔术方法

<?php/** * Created by PhpStorm. * User: fu * Date: 2017/7/19 * Time: 9:41 */ class Person{ protected $name; private $age; private $mobile; function __construct($name, $age) { $this->name = $name; $this->age = $age; } /** * 测试使用的不能直接访问的函数 * @param

PHP 魔术方法之__set__get__unset__isset

[php] view plain copy print? <?php /*** 魔术方法: 是指某些情况下,会自动调用的方法,称为魔术方法 PHP面向对象中,提供了这几个魔术方法, 他们的特点 都是以双下划线__开头的 __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke

初识访问控制修饰符及魔术方法

访问控制修饰符: 访问控制修饰符: 访问控制修饰符可以修饰成员属性,也可以修饰方法,有 public(公有),protected(受保护)和 private(私有)三种. 代码说明: class Clerk{ public $name; protected $salary; private $lover; //构造函数 public function __construct($name,$salary,$lover){ $this -> name = $name; $this -> salar