27岁,山西运城人,职业电商经理人,前端开发工作者,从事过网站建设、网络推广、SEO、SEM、信息流推广、二类电商、网络运维、软件开发,等相关电商工作,经验较为丰富,小米技术社区致力于为广大从事Web前端开发的人员提供一些力所能及的引导和帮助 ...[更多]
E-mail:mzze@163.com
Q Q:32362389
W X:xiaomi168527
27岁,山西运城人,职业电商经理人,网络工程师兼运维,从事过运营商网络建设,企业网络建设、优化。数据中心网络维护等通过,经验丰富,座右铭:当自己休息的时候,别忘了别人还在奔跑。 ...[更多]
大于花一样的年龄,河南郑州是我家,2010年在北京接触团购网,2011年进入天猫淘宝一待就是四年,如今已经将设计走向国际化(ps:误打误撞开始进入阿里巴巴国际站的设计,嘿嘿)五年电商设计,丰富经验,从事过天猫淘宝阿里各项设计,店铺运营,产品拍摄;我将我的经历与您分享是我的快乐!座右铭:越努力越幸运! ...[更多]
E-mail:97157726@qq.com
Q Q:97157726
在项目开发中,编写面向对象(OOP) 程序时,因为一个文件中只能写一个类,并且在执行过程中会有很多的类参与,如果一个一个的加载很麻烦,所以,就需要一个机制实现在PHP执行过程中自动加载需要的类。
1. 一个文件中只能放一个类(必须)
2. 文件名和类名同名(必须)
3. 类文件以.class.php结尾(不是必须)
1、创建Goods.class.php页面
<?php
//商品类
abstract class Goods {
protected $name;
final public function setName($name) {
$this->name=$name;
}
public abstract function getName();
}
2、创建Book.class.php页面
<?php //图书类 class Book extends Goods { public function getName() { echo "《{$this->name}》<br>"; } }
3、创建Phone.class.php页面
<?php //电话类 class Phone extends Goods { public function getName() { echo $this->name,'<br>'; } }
4、在PHP页面上加载类文件
<?php require './Goods.class.php'; //手动加载类文件 require './Book.class.php'; //手动加载类文件 require './Phone.class.php'; //手动加载类文件 //测试 $book=new Book(); $book->setName('面向对象编程'); $phone=new Phone(); $phone->setName('苹果6s'); $book->getName(); $phone->getName();
__autoload()函数,是系统内部的自动加载函数,我们只是定义其函数体。
当缺少类的时候自动的调用__autoload()函数,并且将缺少的类名作为参数传递给__autoload()。
<?php /* *作用:自动加载类 *@param $class_name string 缺少的类名 */ function __autoload($class_name) { require "./{$class_name}.class.php"; } //测试 $book=new Book(); $book->setName('面向对象编程'); $phone=new Phone(); $phone->setName('苹果6s'); $book->getName(); $phone->getName();
注意:__autoload()函数在PHP7.2以后就不支持了,7.2后使用spl_autoload_register()注册加载类。
<?php //方法一: /* //加载类函数 function loadClass($class_name) { require "./{$class_name}.class.php"; } //注册加载类函数 spl_autoload_register('loadClass'); */ //方法二: spl_autoload_register(function($class_name){ require "./{$class_name}.class.php"; }); //测试 $book=new Book(); $book->setName('面向对象编程'); $phone=new Phone(); $phone->setName('苹果6s'); $book->getName(); $phone->getName();
1、spl_autoload_register()可以注册多个自动加载函数
<?php function load1($class) { require "./{$class}.class.php"; } function load2($class) { require "./{$class}.php"; } function load3($class) { require "./{$class}.fun.php"; } spl_autoload_register('load1'); spl_autoload_register('load2'); spl_autoload_register('load3');
注:PHP5.1以后就开始支持此函数。
将类名和文件地址做一个映射,组成一个关联数组。
$map=array( //类名 => 类文件地址 'Goods' => './aa/Goods.class.php', 'Book' => './bb/Book.class.php', 'Phone' => './cc/Phone.class.php' );
代码如下
<?php spl_autoload_register(function($class_name){ //类名和文件地址映射成一个关联数组 $map=array( 'Goods' => './aa/Goods.class.php', 'Book' => './bb/Book.class.php', 'Phone' => './cc/Phone.class.php' ); //在映射数组中找到就包含 if(isset($map[$class_name])) require $map[$class_name]; }); //测试 $book=new Book(); $book->setName('面向对象编程'); $phone=new Phone(); $phone->setName('苹果6s'); $book->getName(); $phone->getName();
在项目中,绝大部分都是规则存储的,不规则的比较少。
本站内容均为小米原创,转载请注明出处:小米技术社区>> PHP类class的使用规则和自动加载类spl_autoload_register()和__autoload()函数的用法