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

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

1、__construct():构造方法,当类被实例化new $class时被自动调用的方法,在类的继承中可以继承与覆盖该方法,例:

//__construct()
class construct{
    public function __construct(){
        $this->var = "this is var";
    }
}
class con2 extends construct{
    public function __construct(){
        $this->var = "this is var2";
    }
}
$con2 = new con2;
echo $con2->var;

3、__destruct():当对象销毁或者不再使用时(页面运行完),自动调用这个方法,例:

class construct{
    public function __construct(){
        $this->var = "this is var";
    }
    public function __destruct(){
        echo ‘close‘;
    }
}
$con = new construct;
//或者最常用的关闭资源
class destruct{
    public function __construct(){
        $this->logfile_handle = fopen(‘/tmp/log.txt‘,w);
    }
    public function __destruct(){
        fclose($this->logfile_handle);
    }
}

4、__toString():该方法用于一个类被当成字符串时应怎么样回应,也就是echo $class时返回的内容是什么,如果没有__toString()魔术方法时,将会返回一个E_RECOVERABLE_ERROR级别的致命错误。

例:

<?php
class TestClass{
    public $foo;
    public function __construct($foo){
        $this->foo = $foo;
    }
    public function __toString(){
        return $this->foo;
    }

}
$class = new TestClass(‘Hello‘);
echo $class;//Hello
?>

5、__invoke():该魔术方法用于类被当作函数使用时,自动调用该方法,但是...__invoke()魔术方法只在PHP5.3.0以上才有效;例

//__invoke() PHP5.3.0以上版本有效
class CallableClass{
    function __invoke($x){
        var_dump($x);
    }
}
$obj = new CallableClass;
$obj(5);
var_dump(is_callable($obj));//true

6、__get()与__set():从一个难以访问的属性读取数据是自动调用__get()魔术方法,从一个难以访问的熟悉赋值的时候自动调用__set()魔术方法,难以访问包括(私有属性,未定义属性、没有初始化的属性)例:

//__get()  __set()
class demoClass{
    private $a;
    private function __get($name){
        return ‘this var not exist‘;
    }
    private function __set($name,$value){
        echo ‘this var value not exist‘;
    }
}
$demo = new demoClass();
var_dump($demo->a);//调用__get()方法
$demo->a = 1;//调用__set()方法

7、__call():该方法在范围类中不存在的方法时自动调用的方法,参数有两个;例:

//__call()
class funClass{
    public function __call($name,$arg){
        echo $name.‘function not exist‘;
    }
}
$fun = new funClass();
$fun->aa();//function not exist

8、__sleep()和__wakeup:这两个魔术方法是在对象序列化serialize()和解序列化unserialize()自动调用的方法:例

//__sleep __wakeup 简单实例
class sleepClass{
    public $myContent;
    public function __construct($string){
        $this->myContent = $string;
    }
    public function __sleep(){
        $this->myContent = "this is mimi";
        return array(‘myContent‘);
    }
    public function __wakeup(){
        echo ‘aaa‘;
    }
}
$sleep = new sleepClass(‘i love bb‘);
$ser = serialize($sleep);//this is mimi
unserialize($ser);//aaa
//或者 常用实例
class Connection {
    protected $link;
    private $server, $username, $password, $db;
    public function __construct($server, $username, $password, $db)
    {
        $this->server = $server;
        $this->username = $username;
        $this->password = $password;
        $this->db = $db;
        $this->connect();
    }
    private function connect()
    {
        $this->link = mysql_connect($this->server, $this->username, $this->password);
        mysql_select_db($this->db, $this->link);
    }
    public function __sleep()
    {
        return array(‘server‘, ‘username‘, ‘password‘, ‘db‘);
    }
    public function __wakeup()
    {
        $this->connect();
    }
}
$con = new Connection(‘127.0.0.1‘,‘root‘,‘‘,‘mythinkcom‘);
echo serialize($con);

9、__clone():$obj2 = clone $obj1与$obj2 = $obj1的区别是前者有两块内存地址,而后者只有一块内存地址。

class cloneClass{
    public $var = ‘aa‘;
}
$clone = new cloneClass;
$clone2 = clone $clone;
echo $clone->var;
echo $clone2->var;
时间: 2024-12-24 02:32:15

php面向对象类中常用的魔术方法的相关文章

PHP中常用的魔术方法

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

PHP面向对象常见的关键字和魔术方法

在PHP5的面向对象程序设计中提供了一些常见的关键字,用来修饰类.成员属性或成员方法,使他们具有特定的功能,例如final.static.const等关键字.还有一些比较实用的魔术方法,用来提高类或对象的应用能力,例如__call().__toString().__autoload等. ①final关键字的应用 final关键字的作用如下:a.实用final标识的类,不能被继承.b.在类中使用final标识的成员方法,在子类中不能被覆盖. 在下面的例子中声明一个MyClass类,并使用final

Python 之面向对象:类和对象调用类中的变量和方法

面向对象的核心是对象,用对象来操控类里面的方法和变量,加上类还具有继承.封装.多态三大特性,提高了代码的复用性和规范性. 一.对象 调用类中的变量和方法 二 .类  调用类中的变量和方法 原文地址:https://www.cnblogs.com/tianpin/p/11283032.html

PHP 中 16 个魔术方法详解

前言 PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用. 魔术方法包括: __construct(),类的构造函数 __destruct(),类的析构函数 __call(),在对象中调用一个不可访问方法时调用 __callStatic(),用静态方式中调用一个不可访问方法时调用 __get(),获得一个类的成员变量时调用 __set(),设置一个类的成员变量时调用 __isset(),当对不可访问属性调用isset()或emp

PHP中的常见魔术方法功能作用及用法实例

概述 在面向对象编程中,PHP提供了一系列的魔术方法,这些魔术方法为编程提供了很多便利.PHP中的魔术方法通常以__(两个下划线)开始,并且不需要显示的调用而是由某种特定的条件出发.这篇文章简单总结了PHP中提供的魔术方法. 开始之前 在总结PHP的魔术方法之前先来定义两个类,以便后边示例使用: 复制代码代码如下: <?phpclass Device {    public $name;               public $battery;            public $data

【Android进阶】为什么要创建Activity基类以及Activity基类中一般有哪些方法

现在也算是刚刚基本完成了自己的第一个商业项目,在开发的过程中,参考了不少人的代码风格,然而随着工作经验的积累,终于开始慢慢的了解到抽象思想在面向对象编程中的重要性,这一篇简单的介绍一下我的一点收获. 首先,在现在的项目中使用的主要是afinal框架,而且这个框架确实比较不错,省去了不少工作量,在编写Activity的过程中,基本都是直接继承自FinalActivity类,这样可以使用这个类给我们封装好的不少的方法,但是随着项目慢慢推进,这种直接继承框架类的一些缺点也开始慢慢的显现出来.最主要的就

夺命雷公狗jquery---18jquery中常用属性(方法)

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script src="js/jquery.js"></script> <script> //页面载入 $(function(){ //为按钮版定事件 $('#btnok').click(function(){ alert

增加、删除类文件或者在一个类中增加、删除方法时,是不能够热部署到服务上的。这时候需要停止服务器重新部署后再启动,就不会出现上面的提示了。

Hot Code Replace Failed 2010-11-05 10:11listquiry | 浏览 14226 次 Some code changes cannot be hot swapped into a running virtual machine, such as changing method names or introducing errors into running code.The current target virtual machine {jboss4Ser

org.apache.commons.lang3.StringUtils类中isBlank和isEmpty方法的区别

相信很多java程序员在写代码的时候遇到判断某字符串是否为空的时候会用到StringUtils类中isBlank和isEmpty方法,这两个方法到底有什么区别呢?我们用一段代码来阐述这个区别吧: 1 @Test 2 public void blankEmpty() { 3 String str = " "; 4 System.out.println("Is empty ? " + StringUtils.isEmpty(str)); 5 System.out.pri