PHP __autoload函数(自动载入类文件)的使用方法
这也是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将对象转换成数组的方法(兼容多维数组类型)
复制代码 代码如下: /** * @author 我们 * @date 2013-6-21 * @todo 将对象转换成数组 * @param unknown_type $obj * @return unknown */ function object_to_array($obj){ $_arr = is_object($obj) ? get_object_vars($obj) :$obj; foreach ($_arr as $key=>$val){ $val = (is_
-
php使用get_class_methods()函数获取分类的方法
本文实例讲述了php使用get_class_methods()函数获取分类的方法.分享给大家供大家参考,具体如下: <?php /* * Created on 2016-7-20 */ class Window //首先定义一个类 { var $state; //窗户的状态 function close_window() //关窗户方法 { $this->state="close"; //窗户的状态为关 } function open_window() //开窗户方法 {
-
php递归方法实现无限分类实例代码
数组: 复制代码 代码如下: $items = array( array('id' => 1, 'pid' => 0, 'name' => '一级11' ), array('id' => 11, 'pid' => 0, 'name' => 'www.jb51.net 一级12' ), array('id' => 2, 'pid' => 1, 'name' => '二级21' ), array('id' => 10, 'pid' => 11,
-
php判断变量类型常用方法
现在让我们了解下具体的使用方法 gettype() gettype 会根据 参数类型返回下列值 "boolean"(从 PHP 4 起) "integer" "double"(如果是 float 则返回"double",而不是"float") "string" "array" "object" "resource"(从 PHP
-
PHP取得一个类的属性和方法的实现代码
复制代码 代码如下: <?php class myclass { var $var1; var $var2 = 'xyz'; var $var3 = 100; private $var4; function myclass() { $this->val1 = "foo"; $this->val2 = "bar"; return true; } function test1() { return true; } } //get_class_metho
-
PHP父类调用子类方法的代码例子
今天突然发现需要在父类中调用子类的方法,之前一直都没这么用过,通过实践发现也可以.例子如: 复制代码 代码如下: <?php/** * 父类调用子类方法 基类 * @author LNMP100 * */class BaseApp{ /** * 调用子类方法 * @version 创建时间:2013-07-10 */ function _run_action() { $action = "index";
-
PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
复制代码 代码如下: <?php /* 边学边做的,为方便自己翻阅而发布,更为得到高人指点而发布,欢迎高手指点...... [提示]本例通过测试无误 [情景设计] 模拟计算机主板IDE接口,比如:主板可以存取的储存器常常有光驱.硬盘.闪存等等, 为了方便,有必要对这些不同的储存器设定同一的接口. 本例还假设一种前所未有的.存取方式与众不同的外星储存器也要加到主板上进行存取, 于是需要采用耦合的设计模式. [本例主要讲述] 1.通过接口.抽象类.一般类继承三种方式达到所谓的"接口"
-
PHP 面向对象 final类与final方法
final---用于类.方法前. final类---不可被继承. final方法---不可被覆盖. final类不能被继承. 如果我们不希望一个类被继承,我们使用final来修饰这个类.这个类将无法被继承.比如我们设定的Math类,涉及了我们要做的数学计算方法,这些算法也没有必要修改,也没有必要被继承,我们把它设置成final类型. 复制代码 代码如下: <? //声明一个final类Math final class Math{ public static $pi = 3.14; public
-
PHP自动载入类文件函数__autoload的使用方法
开发面向对象的应用程序时,往往要对每个类的定义建立一个 PHP 源文件.这样的做法产生的一个很大的烦恼就是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件的列表. 在PHP开发的系统中,当在一个文件中需要调用另一个PHP文件中声明的类时,就需要通过include或require把这个文件引入.不过有的时候,在文件众多的项目中,要一一将所需类的文件都包含进来,是一个让人很头疼的事,所以我们能不能在用到什么类的时候,再把这个类所在的php文件导入呢?这就是我们这里我们要讲的自动加载类. 在
-
PHP __autoload函数(自动载入类文件)的使用方法
这也是OO设计的基本思想之一.在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可.下面是一个实际的例子: 复制代码 代码如下: class ClassA{ public function __construct(){ echo "ClassA load success!"; } } //定义一个类ClassA,文件名为ClassA.php class ClassA{ public function __construct(){ echo &
-
php自动载入类用法实例分析
本文实例讲述了php自动载入类用法.分享给大家供大家参考,具体如下: <?php //function __autoload($class_name) { // require_once $class_name . '.php'; //} spl_autoload_register(array("core",'autoload'));//当实例化类的时候,自动调用core类中的autoload()方法来载入类 //也可以使用__autoload()来实现,但是php新版本建议使用
-
PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
根据 Mysql 里的字段 自动生成 类文件: 但需要导入: require_once ./db/ez_sql_core.php;require_once ./db/ez_sql_mysql.php; 帮助文档:http://jvmultimedia.com/docs/ezsql/ez_sql_help.htm 上图 : 核心代码: 复制代码 代码如下: <?php class db{ /******************************************************
-
PHP使用glob函数遍历目录或文件夹的方法
本文实例讲述了PHP使用glob函数遍历目录或文件夹的方法.分享给大家供大家参考.具体分析如下: 一说到php遍历目录我们很多朋友会想到是opendir与readdir,这样就可以遍历目录并显示文件,但在php中有一个更简洁的遍历目录的函数glob估计很少有人知道此函数,不过我觉得比起opendir与readdir要简单多了. PHP glob函数的使用:glob-寻找与模式匹配的文件路径. 例子,代码如下: 复制代码 代码如下: <?php $fileList=glob('*.*'); for
-
JVM虚拟机查找类文件的顺序方法
JVM查找类文件的顺序: 在doc下使用set classpath=xxx, 如果没有配置classpath环境变量,JVM只在当前目录下查找要运行的类文件. 如果配置了classpath环境,JVM会先在classpath环境变量值的目录中查找要运行的类文件. 值的结尾处如果加上分号,那么JVM在classpath目录下没有找到要指定的类文件,会在当前目录下在查找一次. 值的结尾出如果没有分号,那么JVM在classpath目录下没有找到要指定的类文件,不会在当前目录下查找,即使当前目 录下有
-
react-native 父函数组件调用类子组件的方法(实例详解)
react-native 父函数组件调用类子组件的方法,代码如下所示: import React, {Component} from 'react'; import {Text, View, TouchableOpacity} from 'react-native'; // 父 let child onRefbbb = (ref) => { child = ref } clickccc = () => { child.myName() } const Parent =()=> { ret
-
Mybatis Generator自动生成对应文件的实现方法
使用Generator自动生成我们需要的bean dao mapper xml等文件的过程(没有借助eclipse等编辑工具直接命令提示符生成) 第一步:在E盘新建一个文件夹generator,在这文件夹下创建一个test文件夹用来存放生成的文件,在创建一个generator.xml的配置文件 第二步:导入需要的jar包 mybatis-generator-core-1.3.2.jar 和mysql-connector-java-5.1.28-bin.jar 第三步:编写generator.xm
-
ASP JSON类文件的使用方法
而且要使用某个节点的时候要好好的分析,节点的路径一级级的定位.而JSON最大的好处就是,在使用时候可以只需要将数据字符串声明为一个对象,就可以很方便的调用对象中的各成员.也方便在客户端使用Javascript直接调用程序端生成的数据字符串. 使用ASP的人都知道,ASP可以使用两种类型的脚本引擎,那就是VBSCRIPT和JSCRIPT.偶当初学习的时候就根本不知道JSCRIPT,如果知道的话我想我现在就没有必要这么麻烦的将JSON数据使用JSCRIPT转换后,才能在VBSCRIPT中使用.还好两
-
oracle自动清理archivelog文件的具体方法
1.登陆到服务器上创建rman自动删除两天前的归档日志脚本[oracle@108 ~]$ cat >>del_ora_log.rman <<EOF crosscheck archivelog all;delete noprompt expired archivelog all;delete noprompt force archivelog until time 'sysdate -2'; -------删除两天前的archivelogexit;EOF2.手动执行清除日志[or
随机推荐
- Excel VBA连接并操作Oracle
- JavaScript获取一个范围内日期的方法
- 深入解析java中的locale
- GridView中动态设置CommandField是否可用或可见的小例子
- require.js中的define函数详解
- Zend Framework 2.0事件管理器(The EventManager)入门教程
- PHP面向对象之事务脚本模式(详解)
- 使用jsp调用javabean实现超简单网页计算器示例
- Android Studio使用小技巧:自定义Logcat
- Node.js环境下编写爬虫爬取维基百科内容的实例分享
- jQuery使用之设置元素样式用法实例
- Linux下即插即用设备的安装
- jQuery实现简单滚动动画效果
- jQuery中DOM树操作之复制元素的方法
- 在修改准备发的批量美化select+可修改select时,在非IE下发现了几个问题
- Flask中获取小程序Request数据的两种方法
- 手工帮用户多开一个FTP
- 详解基于Spring Boot/Spring Session/Redis的分布式Session共享解决方案
- ASP.Net生成一个简单的图片
- LintCode 堆化详解及实例代码