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方法,格式化輸出這個對象所包含的數據。

相關文章
相關標籤/搜索