php常用的魔术方法

__construct:构造函数,一旦创建对象都就会自动调用

__call:当调用了未定义的方法时会自动触发

__set:当给类外部不可访问的属性设置值时会自动触发

__get:当获取类外部不可访问的属性时会自动触发

__isset:当对类外部不可访问的属性使用了isset()或empty()时会自动触发

__unset:当对类外部不可访问的属性使用了unset()时会自动触发

__destruct:当对象结束其生命周期时就会自动触发

<?php
header("content-type:text/html;charset=UTF-8");
class Magic{
    private $testGet;       //私有测试__get魔术方法的属性
    private $testSet;       //私有测试__set魔术方法的属性
    private $testIsset;     //私有测试__isset魔术方法的属性
    private $testUnset;     //私有测试__unset魔术方法的属性
    public static $a=1;     //私有用于测试__clone魔术方法的常量

    /**
     * 测试构成方法,创建新对象时先调用此方法
     */
    public function __construct(){
        echo static::$a+2;
        echo "这是构造函数"."<br>"."<br>";
    }

    /**
     * 测试isset方法,这是当不可访问的属性被调用了isset()或者empty()方法时会触发
     */
    public function __isset($name){
        echo "对不可访问属性:".$name."调用 isset() 或 empty()"."<br>"."<br>";
    }

    /**
     * 测试unset方法,这是当不可访问的属性被调用了unset()方法时会触发
     */
    public function __unset($name){
        echo "当对不可访问属性:".$name."调用unset()"."<br>"."<br>";
    }

    /**
     * 测试call方法,这是当调用了未定义的方法时会触发
     */
    public function __call($method,$agrs){
        echo "调用了不存在的方法:".$method."<br>"."这是接收的参数:";
        print_r($agrs);
        echo "<br>"."<br>";
    }

    /**
     * 测试set方法,这是当不可访问的属性被设置时会触发
     */
    public function __set($name,$data){
        echo "调用了不可设置的属性:".$name."<br>"."参数为:".$data."<br>";
    }

    /**
     * 测试get方法,这是当不可访问的属性被访问时会触发
     */
    public function __get($name){
        echo "调用了不可获取的属性:".$name."<br>"."<br>";
    }

    /**
     * 测试clone方法,这是类被克隆时会触发
     */
    public function __clone(){
        echo static::$a+1;
        echo "我被克隆了"."<br>"."<br>";
    }

    /**
     * 测试析构方法,这是当在脚本关闭时被调用
     */
    public function __destruct(){
        echo "这是析构函数";
    }
}

$test=new Magic(); //实例化Magic类,触发构造函数

$test->callMethod(‘123‘);   //调用不存在的方法

$test->testSet=123;     //设置类外部不可访问的属性

$test->testGet;         //获取类外部不可访问的属性

$test2=clone $test;     //克隆test类,开辟了另一份一模一样的属性和方法存储空间,但相互不会影响
isset($test->testIsset);       //用isset执行类外部不可访问的属性
unset($test->testUnset);        //用unset执行类外部不可访问的属性

原文地址:https://www.cnblogs.com/legendheng/p/9175692.html

时间: 2024-08-28 00:34:57

php常用的魔术方法的相关文章

php面向对象类中常用的魔术方法

php面向对象类中常用的魔术方法 1.__construct():构造方法,当类被实例化new $class时被自动调用的方法,在类的继承中可以继承与覆盖该方法,例: //__construct() class construct{ public function __construct(){ $this->var = "this is var"; } } class con2 extends construct{ public function __construct(){ $

PHP中常用的魔术方法

我们在PHP中经常用到魔术方法,像构造方法,析构方法等等魔术变量,下面总结一下一些常用的魔术变量: __construct(),__destruct(),__clone(),__autoload(),__tostring(),__invoke(),__set(),__get(),__unset(),__isset(),__call(),__callstatic; 1,__constuct()构造函数 通常实例化完一个对象之后,都要对该对象的属性进行初始化!在实例化一个对象的时候,PHP系统会自动

php中的重载以及几个常用的魔术方法示例

在面向对象语言中,有一个很重要的概念——overload,即重载.所谓重载,一般是用于在一个类内实现若干重载的方法,这些方法的名称相同而参数形式不同.但是,在php中,这个概念跟大多面向对象语言中的“重载”一点关系都没有,根本就是风马牛不相及的. php中的重载,是指动态地"创建"类属性和方法.当调用当前环境下未定义或不可见的类属性或方法时,重载方法会被调用.再说的直白点,就是访问一个类或者对象的不可访问的属性或者方法的时候的一种处理机制.(不可访问,比如不存在或者因访问关键字的限制而

PHP常用的魔术方法及规则

转:https://www.cnblogs.com/wanglijun/p/10926303.html 1. __construct 具有构造函数的类会在每次创建新对象时先调用此方法;初始化工作执行.2. __desstruct 对象的所有引用都被删除或者当对象被显式销毁时执行.3.__call()在对象中调用一个不可访问方法时,__call() 会被调用.4.__callStatic()在静态上下文中调用一个不可访问方法时,__callStatic() 会被调用.5.__set() 在给不可访

php中常用到的魔术方法

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

php中的常用魔术方法总结

以下是对php中的常用魔术方法进行了详细的总结介绍,需要的朋友可以过来参考下 常用的魔术方法有:__Tostring ()  __Call()  __autoLoad()  __ clone()  __GET()   __SET()    __isset()  __unset() 1.__Tostring()   用于定义输出对象引用时调用  常用于打印一些对象的信息 必须有返回值eg:有一个persion类Persion per =new persion()Echo per;    //直接调

对php面向对象中魔术方法的认识

<?php//header(charset="utf8");    //echo 'hey 这里是描述我对php 面向对象中各种魔术方法的认识.';/* *魔术方法是在一些特定情况下会自动调用的一些php系统自定义函数 *这些函数都很有个性,他们统一以__两个 _ (下划线)开头. * 下面对于php 中这些常用的魔术方法一些个人认识. **/class demo {    public $name;    public $age; //当实例化这个类,首先会自动调用的方法 __

Python 类的魔术方法

Python中类的魔术方法 在Python中以两个下划线开头的方法,__init__.__str__.__doc__.__new__等,被称为"魔术方法"(Magic methods).魔术方法在类或对象的某些事件出发后会自动执行,如果希望根据自己的程序定制自己特殊功能的类,那么就需要对这些方法进行重写. 注意:Python 将所有以 __(两个下划线)开头的类方法保留为魔术方法.所以在定义类方法时,除了上述魔术方法,建议不要以 __ 为前缀. Python提供的魔术方法 魔术方法这里

魔术方法__get()

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