error_reporting(E_ALL);
ini_set('display_errors','1');
在php中開啟與關(guān)閉錯誤提示的方法有幾種一種可以直接在程序中使用相關(guān)函數(shù)來開戶,另一種我們可以使用php.ini中配置參數(shù)來控制,下面小編來給各位同學介紹一下。
windows系統(tǒng)開關(guān)php錯誤提示
如果不具備修改php.ini的權(quán)限,可以將如下代碼加入php文件中:
ini_set("display_errors", "On");error_reporting(E_ALL | E_STRICT);
當然豺妓,如果能夠修改php.ini的話无宿,如下即可:
找到display_errors = On 修改為 display_errors = off注意:如果你已經(jīng)把PHP.ini文件復制到windows目錄下,那么必須同時把c:windows/php.ini里的display_errors = On 修改為display_errors = off
PHP .ini中display_errors = Off失效的解決
在linux系統(tǒng)中開啟與關(guān)閉錯誤提示方法差不多,不過我還是具體給大家介紹一下
linux系統(tǒng)下
1. 打開php.ini文件。
以我的ubuntu為例忌堂,這個文件在: /etc/php5/apache2 目錄下尺铣。
2. 搜索并修改上下行拴曲,把Off值改成On
display_errors = Off
3. 搜索下行
error_reporting = E_ALL & ~E_NOTICE或者搜索:error_reporting = E_ALL & ~E_DEPRECATED修改為error_reporting = E_ALL | E_STRICT
4. 修改Apache的 httpd.conf,
以Ubuntu 為例凛忿, 這個文件在:/etc/apache2/ 目錄下澈灼,這是一個空白文件。
添加以下兩行:
php_flag display_errors? ? ? ? on
php_value error_reporting? ? ? 2039
5. 重啟Apache店溢,就OK了叁熔。
重啟命令: :
sudo /etc/init.d/apache2 restart
在php中靜態(tài)方法我們就直接在函數(shù)或變量前加一個static就可以了,使用的時候和靜態(tài)變量差不多床牧,不需要實例化荣回,直接用::調(diào)用了,下面我來給大家舉幾個關(guān)于靜態(tài)方法實例戈咳。
PHP也不例外心软!所謂靜態(tài)方法(屬性)就是以static關(guān)鍵詞標注的屬性或者方法(例如:靜態(tài)屬性public static username;)
靜態(tài)方法和非靜態(tài)方法最大的區(qū)別在于他們的生命周期不同,用一個實例來說明
靜態(tài)方法定義
定義靜態(tài)方法很簡單著蛙,在聲明關(guān)鍵詞function之前加上static糯累,例如:
class A{? ? static function fun()? ? {? ? ? ? // do somathing? ? }}
靜態(tài)方法使用
使用的時候和靜態(tài)變量差不多,不需要實例化册踩,直接用::調(diào)用泳姐,例如:
A::fun()
對比普通方法
因為靜態(tài)方法的調(diào)用不需要實例化,所以在靜態(tài)方法中引用類自身的屬性或者方法的時候會出錯暂吉,也就是形如self和$this是錯誤的胖秒。
class MyClass{? ? public $num = 5;? ? function __construct()? ? {? ? ? ? $this->num = 10;? ? }? ? function fun_1()? ? {? ? ? ? echo "I am a public method named fun_1.n";? ? ? ? echo "The num of object is {$this->num}.n";? ? }? ? static function fun_2()? ? {? ? ? ? echo "I am a static method named fun_2.n";? ? }? ? function fun_3($n)? ? {? ? ? ? echo "The arg is {$n}n";? ? }}$m = new MyClass;$m->fun_1();$m->fun_2();$m->fun_3('test');MyClass::fun_1();MyClass::fun_2();MyClass::fun_3('test');輸出結(jié)果:lch@localhost:php $ php class_method.php
I am a public method named fun_1.The num of object is 10.I am a static method named fun_2.The arg is test
I am a public method named fun_1.PHP Fatal error:? Using $this when not in object context in /Users/lch/program/php/class_method.php on line 14
再看一實例
用一個實例來說明。
class user{public static $username;? //聲明一個靜態(tài)屬性public $password;? ? //聲明一個非靜態(tài)屬性function __construct($pwd) {? echo ‘Username:’,self::$username;? //輸出靜態(tài)屬性
? self::$username = ‘a(chǎn)dmin’;? //為靜態(tài)屬性賦值? $this->password = $pwd;? //為非靜態(tài)屬性賦值}public function show(){? ? //輸出類屬性? echo ‘Username:’,self::$username;? echo ‘Password:’,$this->password;}public static function sshow(){? echo ‘Username:’,self::$username;? echo ‘Password:’,$this->password;}}user::$username = ‘root’;? ? //為賦值user類的靜態(tài)屬性賦值$objUser = new user(’123456′);? ? //實例化user類$objUser->sshow();unset($objUser);echo ‘Username:’,user::$username;/*
* 輸出結(jié)果為:
* Username:root
* Username:admin
* Password:123456
* Usern
ame:admin
* */
從這里實例中可以看出慕的,靜態(tài)屬性在類實例化以前就起作用了阎肝,并且在對象被銷毀時靜態(tài)屬性依然可以發(fā)揮作用!
也因為靜態(tài)方法的這種屬性肮街,所以不能在靜態(tài)方法中調(diào)用非靜態(tài)屬性或者方法
接著看
1风题、php類中,假設(shè)所有的屬性與方法的可見性為public,那么在外部訪問類的方法或?qū)傩詴r沛硅,都必須通過對象【類的實例化過程】來調(diào)用眼刃。
eg:
class Log{? ? public $root = DIRECTORY_SEPARATOR;? ? public $logPath = '/data/app/www/test-realtime.monitoring.c.kunlun.com/log';? ? public $defaultDir = 'default';? ?
? ? public function writeLog($logName, $logType, $data, $newDir = FALSE)? ? {? ? ? ? $fileName = '';? ? ? ?
? ? ? ? if (!file_exists($this->logPath))? ? ? ? {? ? ? ? ? ? mkdir($this->logPath, 0777);? ? ? ? }? ? ? ?
? ? ? ? if ($newDir !== FALSE)? ? ? ? {? ? ? ? ? ? @mkdir($this->logPath.$this->root.$newDir, 0777);? ? ? ? ? ? $fileName = $this->logPath.$this->root.$newDir.$this->root.date('Y-m-d', time()).'_'.$logName.'_'.$logType.'.log';? ? ? ? }? ? ? ? else
? ? ? ? {? ? ? ? ? ? @mkdir($this->logPath.$this->root.$this->defaultDir, 0777);? ? ? ? ? ? $fileName = $this->logPath.$this->root.$this->defaultDir.$this->root.date('Y-m-d', time()).'_'.$logName.'_'.$logType.'.log';? ? ? ? }? ? ? ?
? ? ? ? file_put_contents($fileName, date('Y-m-d H:i:s').' '.$data."n", FILE_APPEND);? ? }}
類的實例化對象的過程:$logObj = new Log();
訪問類中的方法:$logObj->writeLog($param1, $param2, $param3, $param4);
訪問類中的屬性:echo $logObj->root;
2、如果類中的屬性前被static關(guān)鍵字修飾時摇肌,就不能通過對象來訪問被static修飾的屬性擂红,但如果是類中的方法被static修飾時則即可以通過對象也可以通過類名::方法名的方式來進行訪問。
3围小、如果類中的方法被static修飾則昵骤,方法中不能用$this,$this指的是類的實例化對象肯适,由于靜態(tài)方法不用通過對象就可以調(diào)用变秦,所以偽變量$this不可用。
魔術(shù)方法是在php5中以__開頭的框舔,它們有著魔術(shù)般的功能蹦玫,可以給我開發(fā)帶來很多好處,下面我來給大家介紹魔術(shù)方法一些用法與在php中有那些魔術(shù)方法吧雨饺。
魔術(shù)方法是以兩個下劃線"__"開頭钳垮、具有特殊作用的一些方法惑淳,可以看做php的"語法糖"额港。
語法糖指那些沒有給計算機語言添加新功能,而只是對人類來說更"甜蜜"的語法歧焦。語法糖往往給程序員提供了更實用的編程方式或者一些技巧的用法移斩,有益于更好的編碼風格,是代碼更易讀绢馍。不過其并沒有給語言添加什么新東西向瓷。php里的引用、SPL等都屬于語法糖舰涌。
$tom = new family($student,'peking');$tom = people->say();
上面family類中的construct方法就是一個標準魔術(shù)方法猖任。這個魔術(shù)方法又稱構(gòu)造方法。有構(gòu)造方法就有對應(yīng)的西溝方法瓷耙,即destruct方法,西溝方法會在某個對象的所有引用都被刪除朱躺,或者當對象被顯式銷毀時執(zhí)行。這兩個方法是常見也是最游泳的魔術(shù)方法搁痛。
1长搀、__get、__set
這兩個方法是為在類和他們的父類中沒有聲明的屬性而設(shè)計的鸡典。
◆__get( $property ) 當調(diào)用一個未定義的屬性時源请,此方法會被觸發(fā),傳遞的參數(shù)是被訪問的屬性名。
◆__set( $property, $value ) 給一個未定義的屬性賦值時谁尸,此方法會被觸發(fā)舅踪,傳遞的參數(shù)是被設(shè)置的屬性名和值。
這里的沒有聲明包括當使用對象調(diào)用時症汹,訪問控制為proteced,private的屬性(即沒有權(quán)限訪問的屬性)硫朦。
2、__isset背镇、__unset
◆__isset( $property ) 當在一個未定義的屬性上調(diào)用isset()函數(shù)時調(diào)用此方法咬展。
◆__unset( $property ) 當在一個未定義的屬性上調(diào)用unset()函數(shù)時調(diào)用此方法。
與__get方法和__set方法相同瞒斩,這里的沒有聲明包括當使用對象調(diào)用時破婆,訪問控制為proteced,private的屬性(即沒有權(quán)限訪問的屬性)。
3胸囱、__call
__call( $method, $arg_array ) 當調(diào)用一個未定義的方法是調(diào)用此方法祷舀。
這里的未定義的方法包括沒有權(quán)限訪問的方法;如果方法不存在就去父類中找這個方法,如果父類中也不存在就去調(diào)用本類的__call()方法烹笔,如果本類中不存在__call()方法就去找父類中的__call()方法裳扯。
4、__autoload
__autoload 函數(shù)谤职,它會在試圖使用尚未被定義的類時自動調(diào)用饰豺。通過調(diào)用此函數(shù),腳本引擎在 PHP 出錯失敗前有了最后一個機會加載所需的類允蜈。
如果要定義一個全局的自動加載類冤吨,則必須用spl_autoload_register()方法將處理類注冊到PHP標準庫:
{? ? ? ? ?
? ? static function autoload_class($class_name)? ? ? ? {? ? ? ? ?
? ? //尋找正確的$class_name類,并引入饶套,沒有則拋出異常? ? ? ? ? ? ? }? ? ? ?
}? ? ? /**
*? 設(shè)置對象的自動載入? ? ? ?
*? spl_autoload_register — Register given function as __autoload() implementation? ? ?
*/?
spl_autoload_register(array(‘Loader’, ‘a(chǎn)utoload_class’));?
$a = new Test();//Test沒用require就實例化漩蟆,實現(xiàn)自動加載,很多框架就用這種方法自動加載類
注意: 在 __autoload 函數(shù)中拋出的異常不能被 catch 語句塊捕獲并導致致命錯誤妓蛮,所以應(yīng)該在函數(shù)本身做捕獲怠李。
5、__construct蛤克、__destruct
◆__construct 構(gòu)造方法捺癞,當一個對象創(chuàng)建時調(diào)用此方法,相對于PHP4使用此方法的好處是:可以使構(gòu)造方法有一個獨一無二的名稱,無論它所在的類的名稱是什么.這樣你在改變類的名稱時,就不需要改變構(gòu)造方法的名稱咖耘。
◆__destruct 析構(gòu)方法翘簇,PHP將在對象被銷毀前(即從內(nèi)存中清除前)調(diào)用這個方法。默認情況下,PHP僅僅釋放對象屬性所占用的內(nèi)存并銷毀對象相關(guān)的資源儿倒,析構(gòu)函數(shù)允 許你在使用一個對象之后執(zhí)行任意代碼來清除內(nèi)存版保。當PHP決定你的腳本不再與對象相關(guān)時,析構(gòu)函數(shù)將被調(diào)用呜笑。
在一個函數(shù)的命名空間內(nèi),這會發(fā)生在函數(shù)return的時候彻犁。對于全局變量,這發(fā)生于腳本結(jié)束的時候叫胁。如果你想明確地銷毀一個對象,你可以給指向該對象的變量分配任何其它值.通常將變量賦值勤為NULL或者調(diào)用unset。
6汞幢、__clone
PHP 5中的對象賦值是使用的引用賦值驼鹅,如果想復制一個對象則需要使用clone方法,在調(diào)用此方法是對象會自動調(diào)用__clone魔術(shù)方法森篷,如果在對象復制需要執(zhí)行某些初始化操作输钩,可以在__clone方法實現(xiàn)。
7仲智、__toString
__toString方法在將一個對象轉(zhuǎn)化成字符串時自動調(diào)用买乃,比如使用echo打印對象時。
如果類沒有實現(xiàn)此方法钓辆,則無法通過echo打印對象剪验,否則會顯示:Catchable fatal error: Object of class test could not be converted to string in,此方法必須返回一個字符串前联。
在PHP 5.2.0之前功戚,__toString方法只有結(jié)合使用echo() 或 print()時 才能生效。PHP 5.2.0之后似嗤,則可以在任何字符串環(huán)境生效(例如通過printf()啸臀,使用%s修飾符),但 不能用于非字符串環(huán)境(如使用%d修飾符)双谆。從PHP 5.2.0壳咕,如果將一個未定義__toString方法的對象 轉(zhuǎn)換為字符串席揽,會報出一個E_RECOVERABLE_ERROR錯誤顽馋。
8、__sleep幌羞、__wakeup
◆__sleep 串行化的時候用
◆__wakeup 反串行化的時候調(diào)用
serialize() 檢查類中是否有魔術(shù)名稱__sleep 的函數(shù)寸谜。如果這樣,該函數(shù)將在任何序列化之前運行属桦。它可以清除對象并應(yīng)該返回一個包含有該對象中應(yīng)被序列化的所有變量名的數(shù)組熊痴。
使用__sleep 的目的是關(guān)閉對象可能具有的任何數(shù)據(jù)庫連接,提交等待中的數(shù)據(jù)或進行類似的清除任務(wù)聂宾。此外果善,如果有非常大的對象而并不需要完全儲存下來時此函數(shù)也很有用。
相反地系谐,unserialize() 檢查具有魔術(shù)名稱 __wakeup 的函數(shù)的存在巾陕。如果存在讨跟,此函數(shù)可以重建對象可能具有的任何資源。使用 __wakeup 的目的是重建在序列化中可能丟失的任何數(shù)據(jù)庫連接以及處理其它重新初始化的任務(wù)鄙煤。
9晾匠、__set_state
當調(diào)用var_export()時,這個靜態(tài) 方法會被調(diào)用(自PHP 5.1.0起有效)梯刚。
本方法的唯一參數(shù)是一個數(shù)組凉馆,其中包含按array(’property’ => value, …)格式排列的類屬性。
10亡资、__invoke(PHP 5.3.0以上版本有效)
當嘗試以調(diào)用函數(shù)的方式調(diào)用一個對象時澜共,__invoke 方法會被自動調(diào)用。
11锥腻、__callStatic(PHP 5.3.0以上版本有效)
它的工作方式類似于__call() 魔術(shù)方法咳胃,__callStatic() 是為了處理靜態(tài)方法調(diào)用。
PHP 確實加強了對 __callStatic() 方法的定義;它必須是公共的旷太,并且必須被聲明為靜態(tài)的展懈。同樣,__call() 魔術(shù)方法必須被定義為公共的供璧,所有其他魔術(shù)方法都必須如此