① php如何循環反序列化
1.構造HITCON類反序列化字元串,其中$method='login',$args數組』username』部分可用於構造SQL語句,進行SQL注入,'password』部分任意設置。
2.調用login()函數後,利用username構造聯合查詢,使查詢結果為SoFun類反序列化字元串,設置username構造聯合查詢,使查詢結果為SoFun類反序列化字元串,設置username構造聯合查詢,使查詢結果為SoFun類反序列化字元串,設置file=『flag.php』,需繞過__wakeup()函數。
3.繞過oadData()函數對反序列化字元串的驗證。
4.SoFun類 __destruct()函數調用後,包含flag.php文件,獲取flag,需繞過__wakeup()函數。
② php如何釋放一個class對象
1 unset($mydb) 或直接賦值為空,
2 不用__destruct(), php會自動回收
php是解釋性語言, 一般所定義的數據不太影響性能的不能人工去注銷,
一個腳本運行完, php會自己釋放, 這是php的優點
官方見意最好也不要用unset(), 因為調用函數會浪費資料, 可直接, $var = '';
③ php怎麼將指定日期轉換為時間戳
date('Y-m-d H:i:s', 1156219870);
1、 UNIX時間戳轉換為日期用函數: date()
一般形式:date('Y-m-d H:i:s', 1156219870);
2、日期轉換為UNIX時間戳用函數:strtotime()
一般形式:strtotime('2010-03-24 08:15:42');
3、這種方式在PHP程序中完成轉換,優點是無論是不是資料庫中查詢獲得的數據都能轉換,轉換范圍不受限制,缺點是佔用PHP解析器的解析時間,速度相對慢。
(3)destructphp擴展閱讀
PHP構造函數和析構函數
1、在 PHP4 中,當函數與對象同名時,這個函數將成為該對象的構造函數,並且在 PHP4 中沒有析構函數的概念。
2、在 PHP5 中,構造函數被統一命名為 __construct,並且引入了析構函數的概念,被統一命名為 __destruct。
3、在PHP4中,傳遞變數給一個函數或方法,實際是把這個變數做了一次復制,也就意味著你傳給函數或方法的是這個變數的一個副本,除非你使用了引用符號「&;」 來聲明是要做一個引用,而不是一個 Copy。
4、在 PHP5中,對象總是以引用的形式存在的,對象中的賦值操作同樣也都是一個引用操作。
參考資料
網路-php
④ PHP中的__destruct()析構函數是一個空方法,還是會執行什麼功能
同其他語言中的析構函數功能差不多,PHP中析構函數也是執行一些清理工作(如果非要加入其它的一些事情,那就另說了),其實PHP在腳本執行結束後就會銷毀一切能夠銷毀的東西,不會浪費一丁點資源,沒有析構的話也沒什麼關系了。但是,在腳本執行中,我們也會執行一些命令,讓某些對象生命結束,如果沒有析構,就只能由垃圾收集機制來運行了,這就浪費了一些資源。由此,顯式析構的作用就出來了。
⑤ PHP5,聲明構造函數使用什麼關鍵字,析構函數使用什麼關鍵字
PHP還是比較常用的,於是我研究了一下PHP構造函數,在這里拿出來和大家分享一下,希望對大家有用。如果你在一個類中聲明一個函數,命名為__construct,這個函數將被當成是一個構造函數並在建立一個對象實例時被執行.清楚地說,__是兩個下劃線.就像其它任何函數一樣,構造函數可能有參數或者默認值.你可以定義一個類來建立一個對象並將其屬性全放在一個語句(statement)中.
你也可以定義一個名為__destruct的函數,PHP將在對象被銷毀前調用這個函數.它稱為析構函數.繼承是類的一個強大功能.一個類(子類/派生類)可以繼承另一類(父類/基類)的功能.派生類將包含有基類的所有屬性和方法,並可以在派生類中加上其他屬性和方法.你也可以覆寫基類的方法和屬性.就像3.1.2中顯示的,你可以用extends關鍵字來繼承一個類.
你可能想知道構造函數是如何被繼承的.當它們和其它方法一起被繼承時,他們不會在創建對象時被執行.如果你需要這個功能,你需要用第二章提到的::運算符.它允許你指向一塊命名空間.parent指向父類命名空間,你可以用parent::__construct來調用父類的構造函數.
一些面向對象語言在類之後命名構造函數.PHP的前幾個版本也是如此,到現在這種方法仍然有效.也就是:如果你把一個類命名為Animal並且在其中建立一個命名也是Animal的方法,則這個方法就是構造函數.如果一個類的同時擁有__construt構造函數和與類名相同的函數,PHP將把__construct看作構造函數.這使得用以前的PHP版本所寫的類仍然可以使用.但新的腳本(PHP5)應當使用__construct.
PHP的這種新的聲明構造函數的方法可以使構造函數有一個獨一無二的名稱,無論它所在的類的名稱是什麼.這樣你在改變類的名稱時,就不需要改變構造函數的名稱.你可能在PHP中給構造函數一個像其它類方法一樣的訪問方式.訪問方式將會影響從一定范圍內實例化對象的能力.這允許實現一些固定的設計模式,如Singleton模式.析構函數,相反於構造函數.PHP調用它們來將一個對象從內存中銷毀.默認地,PHP僅僅釋放對象屬性所佔用的內存並銷毀對象相關的資源.析構函數允許你在使用一個對象之後執行任意代碼來清除內存.
當PHP決定你的腳本不再與對象相關時,析構函數將被調用.在一個函數的命名空間內,這會發生在函數return的時候.對於全局變數,這發生於腳本結束的時候.如果你想明確地銷毀一個對象,你可以給指向該對象的變數分配任何其它值.通常將變數賦值勤為NULL或者調用unset.
下面的例子中,計算從類中實例化的對象的個數.Counter類從PHP構造函數開始增值,在析構函數減值.一旦你定義了一個類,你可以用new來建立一個這個類的實例.類的定義是設計圖,實例則是放在裝配線上的元件.New需要類的名稱,並返回該類的一個實例.如果PHP構造函數需要參數,你應當在new後輸入參數.
<?phpclassCounter { privatestatic$count=0; function__construct() { self::$count++; } function__destruct() { self::$count--; } functiongetCount() { returnself::$count; } } //建立第一個實例 $c=newCounter();//輸出1 print($c->getCount()."<br>n"); //建立第二個實例 $c2=newCounter(); //輸出2 print($c->getCount()."<br>n"); //銷毀實例 $c2=NULL; //輸出1 print($c->getCount()."<br>n");?>
與構造函數相反,在PHP5中,可以定義一個名為__destruct()的函數,稱之為PHP5析構函數,PHP將在對象在內存中被銷毀前調用析構函數,使對象在徹底消失之前完成一些工作。對象在銷毀一般可以通過賦值為null實現。
⑥ php 在類中如何釋放內存。
unset()是可以釋放內存的,但是$str=null基本釋放不了的,建議還是用unset()就好了,$str=null只是用來清空變數,以防下面再用的時候遭到干擾的。
⑦ php魔術方法。。
在 PHP 里,將所有以 __(兩個下劃線)開頭的類方法保留為魔術方法,所以在定義類方法時,除了上述魔術方法,建議不要以 __ 為前綴。
魔術方法的引入是對面向對象編程思想的進一步實現,重載就是通過魔術方法來實現的。
PHP 魔術方法主要有:
__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(),__sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo() 等。
最常見的是__construct(), __destruct(),__get(), __set()等:
__construct和__destruct是類的構造函數和析構函數。
⑧ 關於php析構函數__destruct()的問題。
析構函數是在對象銷毀時調用的代碼。
當這個對象用完之後,會自動執行這個函數中的語句。
把資料庫關閉的代碼放在這里。就是在對象被銷毀的時候順便把資料庫連接關閉了。