宝马娱乐在线112222 > 网络应用 > php __autoload魔术方法

原标题:php __autoload魔术方法

浏览次数:61 时间:2019-10-01

然而今天我却发现这个__autoload魔术方法或者你愿意称他为魔术函数,太专一了。当他加载需要包含的类文件时,甚至不管类文件中定义类之外的其它声明。

__autoload()用法

开始回放这个机制。

php手册中的一些讲讲法

首先我们在创建一个Test.class.php文件,键入如下内容

自动加载对象
很多开发者写面向对象的应用程序时对每个类的定义建立一个 PHP 源文件。一个很大的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件列表。

 代码如下

在 PHP 5 中,不再需要这样了。可以定义一个 __autoload 函数,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。

$publicPara='中共十七大啥时候召开的?';
class Test{
 public function  __construct(){
  global $publicPara;
  if(isset($publicPara)){
   echo $publicPara;
  }
  else{
   echo "管我啥事儿了?";
  }
 }
}

Note:

在 __autoload 函数中抛出的异常不能被 catch 语句块捕获并导致致命错误。

得保存这个文件哦!

Note:

然后重新建立一个文件命名为do.php键入如下内容

如果使用 PHP 的 CLI 交互模式 时,Autoloading 不存在。

 代码如下

Example #1 Autoload 例子

<?php
require_once('Test.class.php');
new Test();
?>

本例尝试分别从 MyClass1.php 和 MyClass2.php 文件中加载 MyClass1 和 MyClass2 类。

这样的话输出的正如我们期望的那样是:中共十七大啥时候召开的?

 代码如下

但是当你用到__autoload这个魔术方法的时候,问题就出来了

<?php
function __autoload($class_name) {
    require_once $class_name . '.php';
}

 代码如下

$obj  = new MyClass1();
$obj2 = new MyClass2();
?>

<?php
function __autoload($classname){
require_once($classname.".class.php");
}
new Test();
?>

PHP在魔术函数__autoload()方法出现以前,如果你要在一个程序文件中实例化100个对象,那么你必须用include或者require包含进来100个类文件,或者你把这100个类定义在同一个类文件中——相信这个文件一定会非常大。
但是__autoload()方法出来了,以后就不必为此大伤脑筋了,这个类会在你实例化对象之前自动加载制定的文件。

下边我们通过一个例子来看一下,具体的使用方法,并在稍后说明使用PHP魔术函数__autoload应该注意些什么。

 代码如下

 //定义一个类ClassA,文件名为ClassA.php
class ClassA{
 public  function __construct(){
  echo "ClassA load success!";
 }
}

 //定义一个类ClassB,文件名为ClassB.php,ClassB继承ClassA
class ClassB extends ClassA {
 public function __construct(){
  //parent::__construct();
  echo "ClassB load success!";
 }
}

定义两个测试用的类之后,我们来编写一个含有__autoload()方法的PHP运行程序文件如下:

 代码如下

 function __autoload($classname){
 $classpath="./".$classname.'.php';
 if(file_exists($classpath)){
  require_once($classpath);
 }
 else{
  echo 'class file'.$classpath.'not found!';
 }
}
 
$newobj = new ClassA();
$newobj = new ClassB();

这个文件的运行是一点问题都没有的,可见autoload是多么的好用啊,呵呵……
但是不得不提醒你一下几个方面是必须要注意的。

本文由宝马娱乐在线112222发布于网络应用,转载请注明出处:php __autoload魔术方法

关键词:

上一篇:[福利]PHP100 张恩铭教学视频

下一篇:没有了