PHP 魔术方法 - __autoload()

如果上一章节中的 clone 关键字你不熟悉的话,想必 __autoload() 魔术函数你应该很熟悉了。

_autoload() 魔术函数是 PHP 16 个魔术方法中仅有的定义在全局的魔术函数。

PHP 面试的时候经常爱问,你知道 PHP 中加载一个类有几种方式吗?

巴拉巴拉....,人家最重要的就是靠你 spl_register_autoload() 方法和 __autoload() 魔术方法

魔术方法 __autoload()

很遗憾,随着 spl_register_autoload() 的完善,__autoload() 魔术方法在 7.2.0 版本中被标记为 「 已废弃 」 状态。在你的代码中,最好的就是使用 spl_register_autoload() 来取代它

不管 _autoload() 魔术方法的最终命运如何,我们不得不承认它开启了 PHP 自动加载类的新时代。

过去,有两种自动加载类的方式:

  1. 把所有的类都定义在一个文件中,对,有可能,如果你看到那些古董代码,就会看到一个类文件中定义了不下 100 个类
  2. 使用 Zend Framework 提供的自动加载机制,也就是类名等于目录名

但是,当 __autoload() 魔术方法出现后,情况立刻改变了

如果在你的应用程序里定义了魔术方法 __autoload() ,如果你使用了一个未定义的类。那么 PHP 就会自动调用该方法来加载那个类。这种机制下,我们可以一个类一个文件,如果配合命名空间,就可以抛弃 Zend Framework 那长长的类名,而且再也不用担心类名重复了。

该方法的原型如下

void __autoload ( string $class )

它没有任何返回值,而唯一的参数,就是需要加载的类名。

范例

假设我们的项目目录为 /www/localhost/htdocs ,在该目录下的 classes 子目录中存放了大量的类,比如

/www/localhost/htdocs/classes/Person1.class

<?php
class Person1
{
    public $sex;
    public $name;
    public $age;
    public static $cnt = 1;

    public function __construct($name="",  $age=25, $sex='Male')
    {
        $this->name = $name;
        $this->age  = $age;
        $this->sex  = $sex;
    }
}

/www/localhost/htdocs/classes/Person2.class

<?php
class Person2
{
    public $sex;
    public $name;
    public $age;
    public static $cnt = 1;

    public function __construct($name="",  $age=25, $sex='Male')
    {
        $this->name = $name;
        $this->age  = $age;
        $this->sex  = $sex;
    }
}

/www/localhost/htdocs/classes/Person3.class

<?php
class Person3
{
    public $sex;
    public $name;
    public $age;
    public static $cnt = 1;

    public function __construct($name="",  $age=25, $sex='Male')
    {
        $this->name = $name;
        $this->age  = $age;
        $this->sex  = $sex;
    }
}

我们就可以定一个 __autoload() 魔术函数来自动加载我们的 Person1Person2Person3

<?php


function  __autoload($className) {
    $filePath = /www/localhost/htdocs/classes/{$className}.php”;
    if (is_readable($filePath)) {
        require($filePath);
    }
}

$person = new Person1('Yufei');
$person2 = new Person2('Hero');
$person3 = new Person3('Aini');
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.