PHP学习笔记——Php文件引入

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

 

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

1.include函数

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

 

2.require语句this

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

 

3.autoload机制code

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

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

<?php

class A{ 

function write(){

echo “I am A”;

}

}

?>

 

 

B.php

<?php

spl_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

<?php

 class A{}

?>

 

 

B. php

<?php

function 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

<?php

namespace TEST;

class A{

function myfunc(){

echo "this A::myfunc \n";

}

}

 

 

B.php

<?php

use 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

相关文章
相关标签/搜索