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

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

//当实例化这个类,首先会自动调用的方法 __construct (构造函数)
//注意,在一些特定场合将构造函数写成了私有方法时,需要用静态方法实例化这个类
function __construct($name,$age){
    echo ‘实例化本类最先执行的函数<br>‘;
    $this->name = $name;    //这样以来相当于初始化了这个实例。
    $this->age  = $age;
}

//当对象被克隆时触发的函数 __clone()
function __clone(){
    echo ‘发现克隆体<br>‘;
}

//当我们访问一个不存在的或者无权限访问的属性时。触发函数 __get
//当访问private,protected等属性都会触发该函数
function __get($value){
    echo ‘你正要访问的‘.$value.‘属性无法访问<br>‘;
}

//设置属性与属性值,对已经存在的属性设置不会触发函数 __set
function __set($key,$value){
    echo "你所要设置的属性名为$key,属性值为$value<br>";
}

//当在一个未定义(包括 protected/private)的属性上调用 isset() 时,调用__isset()
function __isset($value){
    echo ‘你所访问的属性不存在<br>‘;
}

//在删除一个不可访问的属性时间触发 __unset()
function __unset($value){
    echo "你这要删除一个名为".$value."的属性<br>";
}

//析构函数指的是当某个对象的所有引用被删除,或者对象被显式的销毁时会执行的函数。 __destruct(析构函数)
//可以说这个方法是在程序的最后面执行的
function __destruct(){
    echo ‘程序跑到尾声才触发的一个函数‘;
}
}
$demo = new demo(‘zhang‘,‘1‘);
//unset($demo->ss);//你这要删除一个名为ss的属性
//isset($demo->sss);//你所访问的属性不存在
//你所要设置的属性名为gender,属性值为nan
//$demo->gender = ‘nan‘;    //不存在的属性出发__set 方法
//$demo->name = ‘jian‘;    //已存在的属性直接设置。
//echo $demo->name;
//$demo->ss;//你正要访问的ss属性无法访问
//$demo1 = clone($demo);    //此时处罚了clone() 方法
?>

时间: 2024-12-24 06:36:04

对php面向对象中魔术方法的认识的相关文章

面向对象中特殊方法的补充、isinstance/issubclass/type、方法和函数、反射

一.面向对象中特殊方法的补充 1.__str__ 能将对象名改成你想要的字符串,但是类型还是类 class Foo(object): def __init__(self): pass def func(self): pass def __str__(self): return "f1" obj = Foo() print(obj,type(obj)) # f1 <class '__main__.Foo'> 2.__doc__ 能将类的注释文档显示出来 class Foo(o

PHP5中魔术方法

魔术函数 1.__construct() 实例化对象时被调用, 当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用. 2.__destruct() 当删除一个对象或对象操作终止时被调用. 3.__call() 对象调用某个方法, 若方法存在,则直接调用: 若不存在,则会去调用__call函数. 4.__get() 读取一个对象的属性时, 若属性存在,则直接返回属性值: 若不存在,则会调用__get函数. 5.__set() 设置一个对象的属性

PHP5中魔术方法函数有哪几个,请举例说明各自的用法

魔术方法: __construct() :实例化对象时被调用: __destuct():当删除一个对象或者对象操作终止是被执行: __call():调用对象不存在方法时被调用: __get():调用对象不存在的属性时被调用: __set():设置对象不存在的属性时被调用: __toString():打印一个对象时被调用,比如echo $obj,print($obj); __clone():克隆对象时被调用,比如$t = new Test();$tt = clone $t; __sleep():s

PHP面向对象之魔术方法复习

魔术方法复习 2014-9-2 10:08:00 NotePad++ By jiancaigege 飞鸿影~========================= 1.__construct() 构造方法 用于类实例化时自动运行的方法 常用于初始化成员属性值等 2.__destruct() 析构函数 用于类销毁时自动运行的方法 常用语销毁资源.关闭资源等 3.__set($param,$value) 用于给对象中非公有的成员属性设置值时自动调用的方法 例如: 1 public function __

面向对象之魔术方法

魔术方法是一种特殊的系统定义的函数方法,写在我们自定义的类中,不需要我们去调用,满足条件后自动调用.PHP 将所有以 __(两个下划线)开头的类方法保留为魔术方法.所以在定义类方法时,除了上述魔术方法,建议不要以 __ 为前缀.魔术方法现有15种,__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toStri

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

面向对象进阶---魔术方法

内置方法 双下方法 魔术方法: 都是python的对象内部自带的 并且都不需要我们自己去调用它 1.  __str__  __repr__:改变对象的字符串显示   输出的类型为str class Course: def __init__(self, name, price, period): self.name = name self.price = price self.period = period def __repr__(self): # 备胎 return '%s,%s,%s' %

java面向对象中的方法重载与方法重写的区别

一.方法重载(overload) a:一个类中允许声明多个方法 b:一个类中允许有多个方法名称一样,但是参数不同的多个方法.通过参数不同来区别不同的方法. 参数不同表现为: 1:参数个数不同 2:参数类型不同 3:参数类型的顺序不同也是参数类型不同 4:在参数类型一样的情况下,名称不一样不代表参数不一样 重载方法的调用: 1:根据调用的时候实际参数来判断到底调用的是哪一方法 2:根据参数的要求,严格匹配传入的对应类型 3:如果严格匹配不到的话,默认遵循就近匹配 4:根据数据默认转换的顺序就近匹配

面向对象中:变量,方法,属性相关知识及示例

变量: 实例变量(字段): class Foo: def __init__(self,name,age): self.__name = name #私有实例变量,只能内部调用,外部不能调用,子类不能调用 self.age = age #公有实例变量,都可以调用 def func(self): pass类变量(静态字段): class Foo: __race = '人类' #私有静态字段,只能内部调用,外部不能调用,子类不能调用 country = '中国' #公有静态字段 def __init_