include() 函數可得到指定文件中的全部文本,並把文本拷貝到使用 include 函數的文件中。php
假設您擁有一個標準的頁眉文件,名爲 "header.php"。如需在頁面中引用這個頁眉文件,請使用 include() 函數,就像這樣:html
<html> <body> <?php include("header.php"); ?> <h1>Welcome to my home page</h1> <p>Some text</p> </body> </html>
如今,假設咱們有一個在全部頁面上使用的標準菜單文件。請看下面這個 "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() 函數與 include() 相同,不一樣的是它對錯誤的處理方式。函數
include() 函數會生成一個警告(可是腳本會繼續執行),而 require() 函數會生成一個致命錯誤(fatal error)(在錯誤發生後腳本會中止執行)。測試
若是在您經過 include() 引用文件時發生了錯誤,會獲得相似下面這樣的錯誤消息:ui
<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() 函數運行相同的例子。
<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')這樣的數組,使得可使用某個對象的方法。
在多數狀況下,咱們並不須要徹底複製一個對象來得到其中屬性。但有一個狀況下確實須要:若是你有一個 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; 用來複制對象的
__toString()是快速獲取對象的字符串信息的便捷方式,彷佛魔術方法都有一個「自動「的特性,如自動獲取,自動打印等,__toString()也不例外,它是在直接輸出對象引用時自動調用的方法。
__toString()的做用
當咱們調試程序時,須要知道是否得出正確的數據。好比打印一個對象時,看看這個對象都有哪些屬性,其值是什麼,若是類定義了toString方法,就能在測試時,echo打印對象體,對象就會自動調用它所屬類定義的toString方法,格式化輸出這個對象所包含的數據。