php专区

 首页 > php专区 > PHP高级 > 面向对象MVC > php自动加载类__autoload()的方法 - php面向对象

php自动加载类__autoload()的方法 - php面向对象

分享到:
【字体:
导读:
          作用:当在程序中需要实例化一个类,刚好这这类又不是在本文件中,则需要用包含函数将外部文件包含进来。但是,当要用的外部类很多后,就会...

php自动加载类__autoload()的方法

作用:当在程序中需要实例化一个类,刚好这这类又不是在本文件中,则需要用包含函数将外部文件包含进来。但是,当要用的外部类很多后,就会发现用包含函数会显得十分的繁琐,这是就可以用__autoload()全局函数自动加载类。

当在index.php中要使用前面三个类时,就需要写三个例如include("name.class.php") 这样的方法,效率会十分低,但如果使用了__autoload()函数就不用这样麻烦了,只需要写这样一个函数方法就可以了:

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

在下例中将通过实例来说明 __autoload() 是如何使用的,首先定义一个类ClassA,文件名为ClassA.class.php,实例代码如下:

  1. class ClassA{  
  2.  public  function funa(){  
  3.    echo "classA  loaded successfully!
    "
    ;  
  4.   }  

然后在相同目录下再定义另一个类ClassB,文件名为ClassB.class.php,ClassB继承ClassA,实例代码如下:

  1.  class ClassB extends ClassA {  
  2.  public function funb(){  
  3.                                                         
  4.    echo "classB also loaded successfully!
    "
    ;  
  5.   }  
  6.  } 
  7. ?> 

最后在与上面两个文件相同目录下再定义一个autoload.php(这个文件名随便取),实例代码如下:

  1. function __autoload($class_name) {  
  2.     require_once ("./".ucfirst($class_name).'.class.php');//ucfirst使类名首字母转换为大写  
  3. }  
  4.  $obj = new ClassB();  
  5. $obj->funa();  
  6. $obj->funb();  
  7. ?> 

运行autoload.php的程序,看结果:

classA loaded successfully!

classB also loaded successfully!

实例:文件夹下有这样几个文件:

  1. User.class.php; 
  2. Person.class.php; 
  3. Message.class.php; 
  4. index.php; 

我们就可以这样操作,代码如下:

index.php

  1. function __autoload($className){     //ucfirst() 将字符串首字母变为大写 
  2. include("ucfirst($className)".class.".php"); } 

例如:在index.php文件中实例化User.class.php中的User类,如果不存在则自动调用__autoload()函数,代码如下:

  1. //将类名User作为参数传入 
  2. *************/ 
  3. $user=new User(); 
  4. //通过自动加载类调用User.class.php文件 
  5. $person=new Person(); 
  6. //通过自动加载类调用Person.class.php文件 
  7. $Message=new Message(); 
  8. //通过自动加载类调用Message.classphp文件 function="" message="new" person="new" user="new"> 
分享到:
php面向对象__call处理错误调用技巧 - ph...
php面向对象__call处理错误调用技巧 在提到__call之前,先来看一个实例的测试结果,以便更好地去了解__call方法的作用.在调用对象中不存在的方法时就会出现系统报错,然后程序退出不能继续执行。如果在类中添加一个“魔术”方法__call(),则调用对象中不存在的方法时就会自动调用该方法,并且程...
php面向对象中子类中重载父类详解 - php...
php面向对象中子类中重载父类详解 因为在PHP中不能存在同名的函数,所以在同一个类中也就不能定义重名的方法,这里所说的重载是指在子类中可以定义和父类同名的方法从而覆盖从父类中继承过来的方法。 子类中重载父类的方法,实例代码如下:      重写方法与访问权限 子类中的覆...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……