首页 > 后端开发 > 正文

如何自动加载类

2024-08-10 05:44:37 | 我爱编程网

小编今天整理了一些如何自动加载类相关内容,希望能够帮到大家。

本文目录一览:

如何自动加载类

如何自动加载类

很多开发者写面向对象的应用程序时对每个类的定义建立一个 PHP 源文件。一个很大的烦恼是不得不在每个脚本开头写一个长长的包含文件列表(每个类一个文件)。
在 PHP 5 中,不再需要这样了。可以定义一个 __autoload() 函数,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。
Tip
spl_autoload_register() 提供了一种更加灵活的方式来实现类的自动加载。因此,不再建议使用 __autoload() 函数,在以后的版本中它可能被弃用。
Note:
在 5.3.0 版之前,__autoload 函数抛出的异常不能被 catch 语句块捕获并会导致一个致命错误。从 5.3.0+ 之后,__autoload 函数抛出的异常可以被 catch 语句块捕获,但需要遵循一个条件。如果抛出的是一个自定义异常,那么必须存在相应的自定义异常类。__autoload 函数可以递归的自动加载自定义异常类。
Note:
自动加载不可用于 PHP 的 CLI 交互模式。
Note:
如果类名比如被用于 call_user_func(),则它可能包含一些危险的字符,比如 ../。 建议您在这样的函数中不要使用用户的输入,起码需要在__autoload() 时验证下输入。
Example #1 自动加载示例
本例尝试分别从 MyClass1.php 和 MyClass2.php 文件中加载 MyClass1 和 MyClass2 类。
<?php
function __autoload($class_name) {
require_once $class_name . '.php';
}
$obj = new MyClass1();
$obj2 = new MyClass2();
?>
Example #2 另一个例子
本例尝试加载接口 ITest。
<?php
function __autoload($name) {
var_dump($name);
}
class Foo implements ITest {
}
/*
string(5) "ITest"
Fatal error: Interface 'ITest' not found in ...
*/
?>
Example #3 自动加载在 PHP 5.3.0+ 中的异常处理
本例抛出一个异常并在 try/catch 语句块中演示。
<?php
function __autoload($name) {
echo "Want to load $name.\n";
throw new Exception("Unable to load $name.");
}
try {
$obj = new NonLoadableClass();
} catch (Exception $e) {
echo $e->getMessage(), "\n";
}
?>
以上例程会输出:
Want to load NonLoadableClass.
Unable to load NonLoadableClass.
Example #4 自动加载在 PHP 5.3.0+ 中的异常处理 - 没有自定义异常机制
本例将一个异常抛给不存在的自定义异常处理函数。
<?php
function __autoload($name) {
echo "Want to load $name.\n";
throw new MissingException("Unable to load $name.");
}
try {
$obj = new NonLoadableClass();
} catch (Exception $e) {
echo $e->getMessage(), "\n";
}
?>
以上例程会输出:
Want to load NonLoadableClass.
Want to load MissingException.
Fatal error: Class 'MissingException' not found in testMissingException.php on line 4

如何自动加载类

如何使用thinkPHP来调用自己写的类呢?

可以用import函数.例如, 你可以把phpMailer.class.php放在 ThinkPHP/Library/Org/Util/文件夹下.

要用的时候,

import('Org.Util.phpMailer');

如果用命名空间的话 ,可以直接new 这个对象

如何自动加载类

我想尝试着写个小型PHP框架,现在卡在类自动加载和路由实现上了

我爱编程网(https://www.52biancheng.com)小编还为大家带来我想尝试着写个小型PHP框架,现在卡在类自动加载和路由实现上了的相关内容。

类自动加载跟路由是框架最基础的特性

给你点自动加载的思路,首先现在写框架必须用上命名空间,框架内部的类文件夹根据命名空间命名方便自动加载

在入口文件引入自己写的Autoload.php 通过spl_autoload_register获得要加载的类名 我爱编程网

spl_autoload_register(function ($class_name) {
    Autoload::splAutoload($class_name);
});

asseek\route\Router


asseek\Func


asseek\route\Route


app\www\docs\docsController


asseek\Controller


asseek\View


如果你采用命名空间上面函数的$class_name是类似这样的字符串,只要你有当前项目的初始路径再根据这段字符串 require相应的php文件应该不难,自动加载就搞定了。

路由就更简单了就是通过$_SERVER['REDIRECT_URL'] 或$_SERVER['REDIRECT_URI']  获得用户访问的URL,根据自己的框架制定的规则从URL中取得控制器与控制器方法名称,判断controller的类是否存在,存在则实例化,再判断controller的method是否存在,存在则调用方法,方法里面加载视图等就是另外的事情了。

以上就是我爱编程网小编为大家带来的内容了,想要了解更多相关信息,请关注我爱编程网。更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“如何自动加载类”相关推荐
php 中aotoload函数,不用new也能自动加载吗
php 中aotoload函数,不用new也能自动加载吗

PHP直接调用函数和调用另外一个文件中的函数的区别//如果是PHP文件中的函数,唯一的区别是:先引入外部文件,然后直接调用。//如果是外部类文件中的函数,需要引入,然后new 对象后,再调用该对象的函数。$msg=test_msg();function test_msg(){echo "";}//调用外部文件中的函数//首先引入文件include_once 'file.php';$msg=t

2025-01-01 19:39:06
php继承一个父类,如何自动执行父类方法
php继承一个父类,如何自动执行父类方法

php继承一个父类,如何自动执行父类方法你在父类写一个成员函数然后子类继承 创建子类对象的时候可以点出来父类的成员函数比如Studentzs=newStudent();zs.SayHello() //点出来的是从父类的继承来的成员函数输出结果为父类的-&gt;我是人类public class Person{    public void SayHello()  

2025-01-07 18:51:33
php函数如何autoload php ___autoload无法自动加载类,用了几种方法都不行,php版本是5.3.13.新手求大神解释
php函数如何autoload php ___autoload无法自动加载类,用了几种方法都不行,php版本是5.3.13.新手求大神解释

php的spl_autoload_register函数参考:《PHP高级程序设计模式、框架与测试》第三部分,第九章9.6SPL自动加载if(false===spl_autoload_functions()){if(function_exists('__autoload')){spl_autoload_register('__autoload',false);}}//C

2024-12-24 09:44:12
Editplus 如何自动完成?
Editplus 如何自动完成?

EditPlus配置PHP调试环境详细图文介绍熟悉PHP以后,使用EditPlus还是比较舒服的,当然也可以通过插件和设置把EditPlus配置为可以动态查看帮助、代码调试和代码自动补全的超轻量级IDE。首先PHP他是一种语言。作为语言,本身的计算机他是不认识他的。所以你需要安装相应的服务去解释他。这样才能把PHP解释后作为web页面呈现给你!Editplus他只是个编辑器。并

2025-01-20 14:52:26
php如何自动刷新页面
php如何自动刷新页面

加载页面时,自动刷新一次,只要一次,解决CSS缓存问题。用JS或JQUERY或PHP代码实现首次加载刷新是需要记录网站访问记录的,常用方法使用cookie记录和session记录。cookie步骤如下:第一步:javascript代码判断是否存在cookie记录值第二步:如果有判断非第一次加载,如果没有就创建一个cookie记录值,以备下次加载判断。cookie有存活周期,但

2024-08-15 22:55:54
php如何下载动态图片保存到本地?
php如何下载动态图片保存到本地?

php如何下载动态图片保存到本地?php远程下载文件functionhttpcopy($url,$file="",$timeout=60){$file=empty($file)?pathinfo($url,PATHINFO_BASENAME):$file;$dir=pathinfo($file,PATHINFO_DIRNAME);!is_dir($dir)&amp;&amp

2024-10-23 11:29:23
Java中如何让web服务器启动的时候自动运行web程序中某个类的某个
Java中如何让web服务器启动的时候自动运行web程序中某个类的某个

Java中如何让web服务器启动的时候自动运行web程序中某个类的某个1、首先让需要自动运行的类继承javax.servlet.http.HttpServlet2、把需要自动运行的类中写一个init方法。(servlet应用程序启动的入口就是init方法)public void init(){            System.out.println("这样在web容器启

2024-05-14 02:03:52
EasyEclipse for PHP 如何自动提示函数
EasyEclipse for PHP 如何自动提示函数

EasyEclipseforPHP如何自动提示函数以往我们往往在输入"."然后alt+/来进行智能提示,下面这个方法,可以帮你大幅度的提高智能打开Eclipse-&gt;Window-&gt;Perferences(首选项),会打开个Perferences的设置界面。找到Java下的Editor(编辑器)下的ContentAssist(内容辅助),右边出现的选项中,有一个Autoa

2024-08-31 08:47:05