在使用PHP的OO模式开发系统时,通常大家习惯上将每个类的实现都存放在一个单独的文件里,这样会很容易实现对类进行复用,同时将来维护时也很便利。这也是OO设计的基本思想之一。在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可。下面是一个实际的例子:

class ClassA{
 public  function __construct(){
  echo “ClassA load success!”;
 }
}
 //定义一个类ClassA,文件名为ClassA.php
class ClassA{
 public  function __construct(){
  echo “ClassA load success!”;
 }
}
class ClassB extends ClassA {
 public function __construct(){
  //parent::__construct();
  echo “ClassB 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是多么的好用啊,呵呵……
但是不得不提醒你一下几个方面是必须要注意的。

1、如果类存在继承关系(例如:ClassB extends ClassA),并且ClassA不在ClassB所在目录
利用__autoload魔术函数实例化ClassB的时候就会受到一个致命错误:
Fatal error: Class ‘Classd’ not found in ……ClassB.php on line 2,

解决方法:把所有存在extends关系的类放在同一个文件目录下,或者在实例化一个继承类的时候在文件中手工包含被继承的类;

2、另外一个需要注意的是,类名和类的文件名必须一致,才能更方便的使用魔术函数__autoload;

其他需要注意的事情:
3、在CLI模式下运行PHP脚本的话这个方法无效;

4、如果你的类名称和用户的输入有关——或者依赖于用户的输入,一定要注意检查输入的文件名,例如:.././这样的文件名是非常危险的。

PHP __autoload函数(自动载入类文件)的使用方法相关推荐

  1. 植物大战僵尸 php,植物大战僵尸修改器使用方法 PHP __autoload函数(自动载入类文件)的使用方法...

    这也是OO设计的基本思想之一.在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可.下面是一个实际的例子: 复制代码 代码如下: class ClassA{ ...

  2. php自动载入类文件函数,我可以在没有PHP的类中自动加载函数文件吗?

    说实话,我认为你不能以一种直截了当的方式.无论如何,使用实用程序类不是更好吗? OOP没什么,看看这个: class HTMLUtil { public static function filter( ...

  3. 搜索的php mysql代码生成器_PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)...

    根据 Mysql 里的字段 自动生成 类文件: 但需要导入: require_once ./db/ez_sql_core.php; require_once ./db/ez_sql_mysql.php ...

  4. java 载入类的三种方法

    载入类的几种方法 所有资源都通过ClassLoader载入到JVM里,那么在载入资源时当然可以使用ClassLoader,只是对于不同的资源还可以使用一些别的方式载入,例如对于类可以直接new,对于文 ...

  5. ES6语法~解构赋值、箭头函数、class类继承及属性方法、map、set、symbol、rest、new.target、 Object.entries......

    2015年6月17日 ECMAScript 6发布正式版本 前面介绍基本语法,  后面为class用法及属性方法.set.symbol.rest等语法. 一.基本语法:  1.         定义变 ...

  6. Android 个人学习笔记- 导入android项目,无法自动生成R文件的解决方法

    2019独角兽企业重金招聘Python工程师标准>>> 从网上下载源码导进eclipse后,发现该有的jar包都有以后,就是无法在gen目录下生成R文件. 假如你也遇到这样的问题,你 ...

  7. 命令行下使用javah命令生成.h文件,出现“错误: 无法访问android.app.Activity 找不到android.app.Activity的类文件”的解决方法...

    在学习NDK中,当我在项目的bin/classes目录下使用javah命令生成头文件时,出现了"错误: 无法访问android.app.Activity 找不到android.app.Act ...

  8. php 重新载入类文件夹,php-如何配置Behat从应用程序特定文件夹自动加载类

    我正在尝试安装&在我现有的小型项目上配置Behat.我了解将* .feature文件放入features文件夹的概念,并且还可以将我的实际* Context.php文件放入features / ...

  9. java构造反射和函数_反射类的构造函数和方法

    开始学习Javaweb,看到了反射,现在还没有用上,先把基础的写上来吧 package com.april.write; public class Grade { private int num; p ...

最新文章

  1. nodejs npm install -g 全局安装和非全局安装的区别
  2. 【Python】Radiobutton组件 LabelFrame组件 Entry组件
  3. mysql商品管理系统总结_Mysql管理总结
  4. python元组类型的变量以及字符串类型的变量作为参数进行传值
  5. FauxPas试用时间破解
  6. 日常笔记——思科认证本地域登录
  7. 如何学习Python课程
  8. SQL Server 2005如何起用 xp_cmdshell
  9. ubuntu问题解答集锦
  10. linux退出 putty_linux – 在一个命令中退出所有SSH连接并关闭PuTTY
  11. [渝粤教育] 西南科技大学 电子商务原理及应用 在线考试复习资料
  12. 圆检测——最小二乘法拟合圆的推导
  13. Java中遍历Set集合的三种方法
  14. Gradle编译spring3.x报错找不到itextpdf4.2.2解决方案
  15. 战地一的服务器在哪个文件夹,战地1怎么加入服务器 战地1加入服务器方法
  16. linux apache
  17. java 基础--类与对象的创建,引用,static静态方法的创建与使用,static变量
  18. 聚合支付与智能POS
  19. 报表开发工具 Stimulsoft Reports V2022.3.5系列发布!
  20. ..\OBJ\PRESSURE_SYSTEM.axf: Error: L6218E: Undefined symbol FLASH_ErasePage (referred from flash.o).

热门文章

  1. 人工智能的恶意用途:预测、预防和缓解
  2. 快手宣布 7 月将取消大小周,​互联网大厂不卷了?
  3. 你的编程技能是否与时俱进? TIOBE 4 月榜单出炉
  4. 漫话:如何给女朋友解释为什么计算机中 0.2 + 0.1 不等于 0.3 ?
  5. mongoDB 文档概念
  6. 玩转Parse(第一篇:新手入门)
  7. 哈啰顺风车成立5亿元“顺风绿色出行基金”
  8. bitcoin转账api,python3.7
  9. C#代码像QQ的右下角消息框一样,无论现在用户的焦点在哪个窗口,消息框弹出后都不影响焦点的变化,那么有两种方法...
  10. 为centos选择国内yum软件库