Time of Update: 2018-12-04
PHP如何去實現弱變數 Php變數 Zval定義; $a=1; $b=$a; 這其中只有一個Zval,如果再寫一個$b=2,才會出現一個新的變數,這叫Cope on write $a=1; $b=$a;$c=$b;以及加上$d=&$c後的變化 $a=1;
Time of Update: 2018-12-04
PHP中的魔術方法總結 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone and __autoload1、__get、__set這兩個方法是為在類和他們的父類中沒有聲明的屬性而設計的__get( $property ) 當調用一個未定義的屬性時訪問此方法__set(
Time of Update: 2018-12-04
PHP中經常使用數組,使用數組最大的好處便是速度!讀寫都可以在O(1)內完成,因為它每個元素的大小都是一致的,只要知道下標,便可以瞬間計算出其對應的元素在記憶體中的位置,從而直接取出或者寫入。那麼核心中是如何?的呢?PHP大部分功能,都是通過HashTable來實現,其中就包括數組。HashTable即具有雙向鏈表的優點,同時具有能與資料匹敵的操作效能。PHP中的定義的變數儲存在一個符號表裡,而這個符號表其實就是一個HashTable,它的每一個元素都是一個zval*類型的變數。不僅如此,儲存使
Time of Update: 2018-12-04
PHP中的變數類型和值是通過C語言實現的,核心具體是如何組織使用者在PHP中定義的變數呢?HashTable在ZE核心中被廣泛使用,PHP變數也正是儲存在一個HashTable實現的符號表裡。當在PHP中調用一個函數或者類時,核心會建立一個新的符號表,這也是為什麼在函數中無法使用函數外部定義的變數的原因。(因為他們分屬兩個符號表,一個當前範圍,一個全域範圍)現在來看核心中是如何定義範圍的:struct _zend_executor_globals { //略 HashTable
Time of Update: 2018-12-04
一、提前準備下載並安裝VS2008下載PHP5.4.5程式:NTS下載TS下載其中php二進位包分為VC6、VC8、VC9及TS和NTS版本。VC6、VC8、VC9分別對應VC6、VC2005、VC2008TS表示(Thread Safe),當以ISAPI(IIS
Time of Update: 2018-12-04
一、建立HashTableint zend_hash_init(HashTable *ht,//指向一個HashTableuint nSize,//nSize是指這個HashTable可以擁有的元素的最大數量。在我們添加新的元素時,這個值會根據情況決定是否自動成長,這個值永遠都是2的次方,如果你給它的值不是一個2的次方//的形式,那它將自動調整成大於它的最小的2的次方值。它的計算方法就像這樣:nSize = pow(2, ceil(log(nSize,
Time of Update: 2018-12-04
這個擴充是將Tokyo Cabinet的部分API提供給PHP用戶端調用。下面是來自百度百科的一段對Tokyo Cabinet的介紹:Tokyo Cabinet 是一個DBM的實現。這裡的資料庫由一系列key-value對的記錄構成。key和value都可以是任意長度的位元組序 列,既可以是二進位也可以是字串。這裡沒有資料類型和資料表的概念。當 做為Hash表資料庫使用時,每個key必須是不同的,因此無法儲存兩個key相同的值。提供了以下存取方法:提供key,value參數來儲存,按
Time of Update: 2018-12-04
在PHP中,物件導向與Class是密切相關的,來看看在核心中如何?Class的介面、繼承、私人、受保護、公開等特性。一、建立類zend_class_entry是核心中定義的一個結構體,是PHP中類與對象的基礎結構類型。如何在擴充中定義myclass類,並能夠在PHP中能夠執行個體化?PHP中看起來像這樣:<?php$obj = new myclass();?>核心中:zend_class_entry *myclass;//定義全域指標變數,指向myclass類。static
Time of Update: 2018-12-04
所有PHP擴充遵循一個共同的結構1、標頭檔包含(包括所有需要的宏、API)2、C聲明匯出函數3、聲明Zend函數塊一、標頭檔包含通過ext_seketon建立的擴充,預設都會建立一個php_extname.h的標頭檔。其中包含了php.h,該檔案匯入Zend基本的宏和API。二、聲明匯出函數ZEND_FUNCTION(my_function),提供PHP中調用的函數。展開此宏:void zif_my_function(INTERNAL_FUNCTION_PARAMETERS)void
Time of Update: 2018-12-04
$str=preg_replace("/s+/", " ", $str); //過濾多餘斷行符號$str=preg_replace("/<[ ]+/si","<",$str); //過濾<__("<"號後面帶空格) $str=preg_replace("/<!--.*?-->/si","",$str); //注釋$str=preg_replace("/<(!.*?)>/si","",$str);
Time of Update: 2018-12-04
mssql_connect() [function.mssql-connect]: message: 使用者 '(null)' 登入失敗。原因: 未與信任 SQL Server 串連相關。 (severity 14 ) 一台windows伺服器跑了php和mssql,php需要串連本地的mssql 寫了個test頁面<?php$conn=mssql_connect("127.0.0.1","sa","xxxx"); //測試連接 if($conn)
Time of Update: 2018-12-04
StatusNet設定檔config.php(安裝參考) StatusNet安裝配置。以下是config.php刷屏,O(∩_∩)O~//使用URL Rewrite$config['site']['fancy'] = true;//對手機瀏覽友好$config['site']['mobile'] = true;//Settings$config ['location']['share'] = false; // 設定是否顯示“地理共用”選擇框(checkbox);$config
Time of Update: 2018-12-04
要點:1.php中目前是不直接的支援方法重載的 。2.php中通過使用__call來類比使用方法重載。<?php//php中的方法重載的使用 class D{ public function test1($p){ echo "方法1"; } public function test2($p){ echo "方法2"; } //魔術方法 public function __call($method,$p){ if($method=="test"){
Time of Update: 2018-12-04
<?php//php中的方法重載的使用 class D{ public function test1($p){ echo "方法1"; } public function test2($p){ echo "方法2"; echo "<br/>函數當前所在的類:".__CLASS__; } //魔術方法 public function __call($method,$p){ if($method=="test"){ if(count($p)==1){
Time of Update: 2018-12-04
成員方法的執行個體:<?php class Person{ public $name; public $age; public function speak(){ echo "我是一個好人!"; } } $person=new Person(); $person->speak();?><?php class Person{ public $name; public $age; //人說話的方法 public function speak(){
Time of Update: 2018-12-04
一:XAMPP的配置 XAMPP的配置在這個網址上 http://www.apachefriends.org/zh_cn/xampp-windows.html#1735;可以在上面學習,裝這個XAMPP就可以了 不用裝mysql了,這個東西是繼承資料庫二:搭建eclipse 環境,需要載入外掛程式net.sourceforge.phpeclipse_1.1.8.bin.dist.zip外掛程式; 外掛程式net.sourceforge.phpeclipse_1.1.8
Time of Update: 2018-12-04
function sameNameUniqueCheck(& $FORM) { if ($_POST['name'] != null) { $arr_first = array_filter($_POST['name']); $count_first = count($arr_first); if ($count_first != 0) { $arr_second = array_unique($arr_first);
Time of Update: 2018-12-04
硬體環境:伺服器:DL180G6 (16 Intel(R) Xeon(R)CPU E5620 @2.40GHz) 16G記憶體壓力機:DL180G6 (16 Intel(R) Xeon(R) CPU E5620 @ 2.40GHz) 16G記憶體 軟體環境:nginx1.2.5php5.4.9 最大600php-fpm 網路環境:千兆 測試情境:情境一:(無任何擴充):情境二:(開啟APC 3.1.14,分配緩衝5
Time of Update: 2018-12-04
終於實現了PHP5下通過phpMyAdmin對MySQL4.1以上資料庫的訪問。 在這之前,採用phpMyAdmin訪問時總提示說不能載入MySQL擴充。從網上搜集了若干資料,按照其方法都未能解決。後來執行phpMyAdmin目錄下的phpinfo.php,發現extension_dir總是c:/php5,猜測php.ini檔案資訊根本就沒有被讀取。於是想到在apache的http.conf裡面設定了PHPIniDir d:/php/。於是猜測apache會以這個目錄來讀取設定檔。
Time of Update: 2018-12-04
今天調了半天index.php的代碼,費了很大的勁,甚至把別人的原始碼全都拿過來了,還是不行。最後自己動手跟了一遍程式後,才發現問題不是出在這,而是在editwishlist.php中,在editwishlist.php中有一行代碼: array_key_exists(mixed $key, array $search) 寫錯了,而這個頁面的預設錯誤處理是返回首頁,由於本地執行速度太快,導致我誤以為錯誤還是在index.php中。