在工作日常开发中,我最常用的文件引用莫过于include(include_once),以及require(require_once),这两种引用已经满足了日常简单CGI的开发需要,但是当深入了解PHP框架的内容,就会发现单单这两个关键字远远不够,本文整理了部分php文件引用所涉及的知识。

首先简要的介绍一下include和require的用法

1.include

被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path(定义于php配置文件)指定的目录寻找。如果在 include_path 下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工作目录下寻找。

2.require语句

require 和 include 几乎完全一样,除了处理失败的方式不同之外。require 在出错时产生 E_COMPILE_ERROR 级别的错误。换句话说将导致脚本中止,而 include 只产生警告(E_WARNING),脚本会继续运行。

3.autoload机制

__autoloader函数是默认用于载入未知PHP类的函数,当再php代码中出现了未知类时,程序将会自动调用该函数,函数原型及一种简单的实现如下

function __autoload($classname) {$filename = "./". $classname .".php";include_once($filename);}

通常在各个类型不同的类中可以实现自己的__autoload()函数,如果希望注册自己的__autoLoade函数则可以使用spl中的spl_autoload_register(),该函数可以将自定义的函数放入autoloader队列当中,当autoloader被触发是,将会依次调用队列中的函数。

spl_autoload_register()原型如下

bool spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] )

spl_autoload_register可以被调用多次,将多个自定义的回调函数插入到autoload函数队列当中。

__autoloader()函数在ZEND引擎中有一个默认的实现,就是spl_autoload(),当不愿意自己实现__autoloader()函数的时候,可以使用这个php自带的载入函数,通常该函数会和spl_autoload_extensions()函数一起使用,spl_autoloader_extensions()可以指定所包含类所在文件的扩展名,spl_autoload()函数会依据类名+扩展名的形式,在include_path当中寻找对应类所在的文件。之后在代码中调用不含参数的spl_autoload_register()就可以在该程序中调用默认的spl_autoload()函数。

A. class.php

<?phpclass A{ function write(){echo “I am A”;}}?>

B.php

<?phpspl_autoload_extensions(“.class.php”);spl_autoload_register();$a=new A();  $a->write();  // I am A?>

spl_autoload_call()函数的目的是为了让我们可以手动去调用spl_autoload_register()注册队列中的回调函数,常规情况下,只有遇到未知类才会调用autoloader队列中的回调函数,spl_autoload_call可以实现手动调用,依次调用队列中的回调函数直到成功加载到未知类。

A. php

<?phpclass A{}?>

B. php

<?phpfunction A($class){ echo "A";};function B($class) {echo "B";include($class.".php");};spl_autoload_register(A);spl_autoload_register(B);spl_autoload_call("A");  //输出 AB?>

4.use 关键字

use语句可以引用其他名空间中的类。Php名空间的作用跟其他语言的名空间作用一样,用于解决第三方的类中变量及函数的冲突问题。

A.php

<?phpnamespace TEST;class A{function myfunc(){echo "this A::myfunc \n";}}

B.php

<?phpuse TEST\A;require_once("A.php");class B{function myfunc(){print "this B::myfunc \n";}}$b=new B();$b->myfunc();$a=new A;$a->myfunc();

输出:

this B::myfunc

this A::myfunc

转载于:https://www.cnblogs.com/sworddance/p/4280736.html

PHP学习笔记——Php文件引入相关推荐

  1. android中资源文件的两种访问方式,Android_Android学习笔记-保存文件(Saving Files),Android设备有两种文件存储区域 - phpStudy...

    Android学习笔记-保存文件(Saving Files) Android设备有两种文件存储区域: 内部存储和外部存储 ("internal" and "externa ...

  2. Vue + Spring Boot 学习笔记02:引入数据库实现用户登录功能

    Vue + Spring Boot 学习笔记02:引入数据库实现用户登录功能 在学习笔记01里,我们利用跨域打通了前端的Vue与后端的Spring Boot,实现了用户登录功能,但是后台的登录控制器在 ...

  3. Python学习笔记:文件(File)

    Python学习笔记:文件(File) 打开一个文件用于读写,在Python里十分简单,利用内置open函数,可以用绝对路径,也可以用相对路径. 默认模式是'r',只读模式. 文件句柄f是一个可迭代对 ...

  4. opencv学习笔记五--文件扫描+OCR文字识别

    opencv学习笔记五--文件扫描+OCR文字识别 文件扫描 定义函数 边缘检测 获取轮廓 变换 OCR文字识别 环境配置 代码 文件扫描 # 导入工具包 import numpy as np imp ...

  5. oracle学习笔记 参数文件及数据库的启动和关闭

    oracle学习笔记 参数文件及数据库的启动和关闭 我们这节课把oracle的参数文件以及oracle的启动关闭讲一下 一)参数文件作用 先看oracle的参数文件 它由来已久了 我们知道oracle ...

  6. ROS学习笔记-roslaunch文件的编写用sh脚本控制launch文件启动顺序

    转载自:https://mp.weixin.qq.com/s?__biz=MzUyMTkxODQyOQ==&mid=2247484719&idx=1&sn=27b3a01c29 ...

  7. Matlab学习笔记——数据文件定位

    写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 目录 数据文件定位 1.fseek函数 2.ftell函数 3.feof函数 数据文件定位 1.fseek函数 用于改变 ...

  8. Qt学习笔记之文件处理

    Qt提供了通用的文件处理类QFile和处理文本的QTextStream类和处理二进制数据的QDataStream类,这些流操作极大地方便了对文件的督促存储.对文件信息和目录进行操作的类是QfileIn ...

  9. Python学习笔记--exe文件打包与UI界面设计

    exe文件打包与UI界面设计 前言 一.基于tkinter实现的UI设计 1.1 库的选择及思路 1.2 定位方法的选用 1.3 Frame控件 1.4 变量设置 1.5 批量设置 1.6 Text文 ...

最新文章

  1. 重磅!MaxCompute助力阿里开源自研语音识别模型DFSMN,准确率高达96.04%
  2. Java ArrayDeque工作原理及实现
  3. 北京冬奥黑科技; 揭秘虎年春晚硬核科技;全球首款AR隐形眼镜问世;索尼3D显示技术路径曝光...
  4. 针对新手的Java EE7和Maven项目–第7部分
  5. windows下通过adb shell进入data目录
  6. 海龟绘图两小时上手C语言 - 2 绘制正方形
  7. OpenCV实现图像翻转
  8. vijos1697——平面几何
  9. 最全,176个HFSS仿真实例模型文件分享
  10. PS教程:通道抠图美女发丝
  11. html涂鸦画板插件,sketchpad-简单的HTML5 Canvas涂鸦画板插件 -HTML5功能
  12. css之右上角带弧形的三角形标签文字45度倾斜显示
  13. 介绍Zbrush是什么软件
  14. dvt高危患者的护理措施_DVT的预防措施
  15. ADS1258使用START注意的事项
  16. 小小蜂鸣器,驱动电路可大有学问(重点三极管基极的限流和分压电路)
  17. 深度学习入门笔记(十五):深度学习框架(TensorFlow和Pytorch之争)
  18. UTNet 用于医学图像分割的混合Transformer
  19. 如何处理RuntimeError: _cdist_backward requires X1(X2) to be contiguous
  20. SHU汇编程序设计常见考点、易错点总结与综合实例、汇编学习资源

热门文章

  1. vs2012编译boost_1_54_0
  2. LNMP(nginx防盗链,访问控制,解析php相关配置,Nginx代理,常见502问题)
  3. CloudCC CRM探讨如何建立完善的服务体系
  4. http请求中的Content-Type,详解
  5. learn go anonymous function
  6. [控件] LabelView
  7. ASCII和Unicode编码
  8. English学习资料大全
  9. Flink SQL Client注册SCALA UDF完整流程
  10. Flink SQL Client方言切换与datagen->Hive(DDL形式+streaming形式)