php克隆 自动加载

PHP加载

include() 函数

include() 函数可得到指定文件中的全部文本,并把文本拷贝到使用 include 函数的文件中。php

例子 1

假设您拥有一个标准的页眉文件,名为 "header.php"。如需在页面中引用这个页眉文件,请使用 include() 函数,就像这样:html

<html>
<body>

<?php include("header.php"); ?>

<h1>Welcome to my home page</h1>

<p>Some text</p>

</body>
</html>

 

例子 2

如今,假设咱们有一个在全部页面上使用的标准菜单文件。请看下面这个 "menu.php"web

<html>
<body>

<a href="http://www.w3school.com.cn/default.php">Home</a> |
<a href="http://www.w3school.com.cn/about.php">About Us</a> | 
<a href="http://www.w3school.com.cn/contact.php">Contact Us</a>

三个文件,"default.php"、"about.php" 以及 "contact.php" 都引用了 "menu.php" 文件。这是 "default.php" 中的代码:数组

 

<?php include("menu.php"); ?>

<h1>Welcome to my home page</h1>

<p>Some text</p>

</body>
</html>

 若是您在浏览器中查看 "default.php" 的源代码,应该相似这样:浏览器

<html>
<body>

<a href="default.php">Home</a> |
<a href="about.php">About Us</a> | 
<a href="contact.php">Contact Us</a>

<h1>Welcome to my home page</h1>
<p>Some text</p>

</body>
</html>

同时,固然,咱们也将用相同的方法处理 "about.php" 和 "contact.php"。经过使用引用文件,在您须要重命名连接、更改连接顺序或向站点添加另外一张网页时,只要简单地更新 "menu.php" 文件中的文本便可。 服务器

require() 函数

require() 函数与 include() 相同,不一样的是它对错误的处理方式。函数

include() 函数会生成一个警告(可是脚本会继续执行),而 require() 函数会生成一个致命错误(fatal error)(在错误发生后脚本会中止执行)。测试

若是在您经过 include() 引用文件时发生了错误,会获得相似下面这样的错误消息:ui

PHP 代码:

<html>
<body>

<?php
include("wrongFile.php");
echo "Hello World!";
?>

</body>
</html>

 错误消息:this

Warning: include(wrongFile.php) [function.include]:
failed to open stream:
No such file or directory in C:\home\website\test.php on line 5

Warning: include() [function.include]:
Failed opening 'wrongFile.php' for inclusion
(include_path='.;C:\php5\pear')
in C:\home\website\test.php on line 5

Hello World!

请注意,echo 语句依然被执行了!这是由于警告不会停止脚本的执行。

如今,让咱们使用 require() 函数运行相同的例子。

PHP 代码:

<html>
<body>

<?php
require("wrongFile.php");
echo "Hello World!";
?>

</body>
</html>

 错误消息:

Warning: require(wrongFile.php) [function.require]:
failed to open stream:
No such file or directory in C:\home\website\test.php on line 5

Fatal error: require() [function.require]:
Failed opening required 'wrongFile.php'
(include_path='.;C:\php5\pear')
in C:\home\website\test.php on line 5

 

因为在致命错误发生后终止了脚本的执行,所以 echo 语句不会执行。

正由于在文件不存在或被重命名后脚本不会继续执行,所以咱们推荐使用 require() 而不是 include()。

 

 

自动加载类库文件

当类多了之后,好比要在一个文件中载入3个类库文件:a.class.php,b.class.php,c.class.php要用三个

require_once(‘classes/a.class.php);
require_once(‘classes/b.class.php);
require_once(‘classes/c.class.php);
能够用PHP5自动加载的功能来处理:在全局应用配置文件中,定义一个特殊的函数__autoload($class)函数(__autoload并非一个类的方法,只是单独的函数,和类没有关系):
function __autoload($class)

{
require_once(“classes/$class)
}
该函数放哪没有关系,在建立类实例时,也没必要去调用这个autoload函数。PHP会自动完成。但务必注意一点:“在调用页面上建立实例所使用的类名 称”、和“被调用的文件名”、以及“该文件中的类的名称”3个必须是同样的。这样就不须要去调用__autoload();若是不同则必须单独调用 __autoload(‘c’);并给它一个文件名前缀。

关于根路径:php里面“/”表明根路径:指该文件所在的磁盘好比:D:/
html里面/表明根路径:指服务器文件夹:www

    function __autoload($class_name) {  
        echo '__autload class:', $class_name, '<br />';  
    }  
    function classLoader($class_name) {  
        echo 'SPL load class:', $class_name, '<br />';  
    }  
    spl_autoload_register('classLoader');  
    new Test();//结果:SPL load class:Test  

 

 语法:bool  spl_autoload_register ( [callback $autoload_function] )    接受两个参数:一个是添加到自动加载栈的函数,另一个是加载器不能找到这个类时是否抛出异常的标志。第一个参数是可选的,而且默认指向 spl_autoload()函数,这个函数会自动在路径中查找具备小写类名和.php扩展或者.ini扩展名,或者任何注册到 spl_autoload_extensions()函数中的其它扩展名的文件。

include("/wamp/www/0607/Ren.class.php");
include "Ren.class.php";

require("Ren.class.php");
require "Ren.class.php";

require_once("Ren.class.php");
require_once "Ren.class.php";

 

    if(false === spl_autoload_functions()){      
        if(function_exists('__autoload')){      
            spl_autoload_registe('__autoload',false);      
        }      
     }     

 

spl_autoload_functions()函数会返回已注册函数的一个数组,若是SPL自动加载栈尚未被初始化,它会返回布尔值false。然 后,检查是否有一个名为__autoload()的函数存在,若是存在,能够将它注册为自动加载栈中的第一个函数,从而保留它的功能。以后,能够继续注册 自动加载函数。

还能够调用spl_autoload_register()函数以注册一个回调函数,而不是为函数提供一个字符串名称。如提供一个如array('class','method')这样的数组,使得可使用某个对象的方法。

php复制对象

对象复制

在多数状况下,咱们并不须要彻底复制一个对象来得到其中属性。但有一个状况下确实须要:若是你有一个 GTK窗口对象,该对象持有窗口相关的资源。你可能会想复制一个新的窗口,保持全部属性与原来的窗口相同, 但必须是一个新的对象(由于若是不是新的对象,那么一个窗口中的改变就会影响到另外一个窗口)。还有一种状况: 若是对象A中保存着对象B的引用,当你复制对象A时,你想其中使用的对象再也不是对象B而是B的一个副本,那么 你必须获得对象A的一个副本。

对象复制能够经过clone关键字来完成(若是对象中存在__clone()方法,会先被调用)。对象中的 __clone()方法不能直接调用。

$copy_of_object = clone $object;

 

class Ren{
  public $name;
  public $sex;

  function __construct($n,$s){
    $this->name=$n;
    $this->sex = $s;
  }

  function __clone(){
    $this->name = "李四"; //this表明的是复本对象
    //$that->name = "lisi"; //that表明本来,后来废弃了
  }
}

//克隆
$r1 = clone $r;

用来复制对象的

php面向对象之__toString()

__toString()是快速获取对象的字符串信息的便捷方式,彷佛魔术方法都有一个“自动“的特性,如自动获取,自动打印等,__toString()也不例外,它是在直接输出对象引用时自动调用的方法。

__toString()的做用

当咱们调试程序时,须要知道是否得出正确的数据。好比打印一个对象时,看看这个对象都有哪些属性,其值是什么,若是类定义了toString方法,就能在测试时,echo打印对象体,对象就会自动调用它所属类定义的toString方法,格式化输出这个对象所包含的数据。

相关文章
相关标签/搜索