兩個單獨的PHP檔案:
PhpGlobal.php 和
PhpStatic.php
PhpGlobal.php全部內容:
>>Parse error: syntax error, unexpected '&', expecting T_VARIABLE or '$' in D:\WebSite\MyHost\www.35dalu.com\public_html\test\PhpGlobal.PHP on line 10*/function censorCount(&$string){ global &$censorCount; $censorCount = (object)array('banned' => 0,'mod'=> 0,'filter' => 0); if(preg_match("/日本/i",$string)) { $censorCount->banned++; } if(preg_match("/韓國/i",$string)) { $censorCount->mod++; } if(preg_match("/尼瑪/i",$string)) { $censorCount->filter++; $string = str_replace("尼瑪","nima",$string); } return $string;}$arr = array('title' => "尼瑪韓國比日本牛鼻嗎?",'content' => "韓國比日本牛鼻嗎?WHOSAIDSO?WHO !WHO!",'author' => "韓國比",);$censorCount = '';foreach( $arr as $k => $v){ $arr[$k] = censorCount( $v );}print_r( $arr );echo '';print_r( $censorCount );
PhpStatic.php全部內容:
>>Array( [title] => **nima**韓國比日本牛鼻嗎? [content] => 韓國比日本牛鼻嗎?WHOSAIDSO?WHO !WHO! [author] => 韓國比)0*/function censorCount(&$string){ static $censorCount; static $cc = 0; $censorCount = (object)array('banned' => 0,'mod'=> 0,'filter' => 0); if(preg_match("/日本/i",$string)) { $cc++; $censorCount->banned++; } if(preg_match("/韓國/i",$string)) { $cc++; $censorCount->mod++; } if(preg_match("/尼瑪/i",$string)) { $cc++; $censorCount->filter++; $string = str_replace("尼瑪","**nima**",$string); } return $string;}$cc=0;$arr = array('title' => "尼瑪韓國比日本牛鼻嗎?",'content' => "韓國比日本牛鼻嗎?WHOSAIDSO?WHO !WHO!",'author' => "韓國比",);$censorCount = '';foreach( $arr as $k => $v){ $arr[$k] = censorCount( $v );}print_r( $arr );echo '';echo "$cc";print_r( $censorCount );
我現在要的內容是:每次檢測都會讓檢測的結果累加。
在弄一個字串過濾的函數但是裡面的檢測結果不能統計,就是程式全部檢測完之後統計一遍 所有總的 mod數目 banned數目 filter數目。但是
static 靜態變數 和
global 引入傳遞都不起作用!
回複討論(解決方案)
沒仔細看代碼,不過你可以考慮寫到一個檔案裡面,或者用資料庫儲存
$censorCount = (object)array('banned' => 0,'mod'=> 0,'filter' => 0);
賦值,,,會抹去之前所有的改動
你這代碼即使實現看起來也夠難看,用類方式重寫吧。
function censorCount(&$string=''){ static $censorCount; static $cc = 0; if(empty($string)) return $censorCount;//注意這裡 if(empty($censorCount)) $censorCount = (object)array('banned' => 0,'mod'=> 0,'filter' => 0);//注意這裡 if(preg_match("/日本/i",$string)) { $cc++; $censorCount->banned++; } if(preg_match("/韓國/i",$string)) { $cc++; $censorCount->mod++; } if(preg_match("/尼瑪/i",$string)) { $cc++; $censorCount->filter++; $string = str_replace("尼瑪","**nima**",$string); } return $string;}$cc=0;$arr = array('title' => "尼瑪韓國比日本牛鼻嗎?",'content' => "韓國比日本牛鼻嗎?WHOSAIDSO?WHO !WHO!",'author' => "韓國比",);$censorCount = '';foreach( $arr as $k => $v){ $arr[$k] = censorCount( $v );}print_r( $arr );echo '';echo "$cc";print_r( censorCount() );//注意這裡另一版本與此類似
PHP code
function censorCount(&$string='')
{
static $censorCount;
static $cc = 0;
if(empty($string)) return $censorCount;//注意這裡
if(empty($censorCount)) $censorCount = (object)array('bann……
謝謝啊。
不過那個 $cc的變數的值沒有變啊。
另外我有一個疑問的地方。
(1)如果在函數裡面使用static,那麼那個變數不需要提前聲明嗎?
(2)我發現有的時候 $obj=(object)array(); 會報錯,必須寫非空的array()才不會。但是有的時候我又發現直接寫一句 $obj=(object)array(); 不會報錯,但是有的時候又會報錯。
(3)關於函數內引用傳遞的 在函數內使用 global &$var; 立即報錯。那個 & 和 $var 之間是否要空格?還是 & 和$var串連在一起。
(4)函數引用傳遞的問題。只知道變數引用傳遞是在函數內變動,那麼函數外的也變了。那函數引用傳遞是什麼作用?一直難以理解…………
$obj=(object)array(); 有時候會報錯?我見暫時毛見過,當然我也用得不多
&$var 不需要空格
函數引用返回多見於對象吧,比如引用一個物件變數很多,你希望用完後人肉清理,可以用&.再$test=null
老兄也有這個問題啊! 仔細看手冊,一句一句地看及例子了。
你的代碼太長了。
(1)如果在函數裡面使用static,那麼那個變數不需要提前聲明嗎?
static就是聲明,也可賦值。只起作用一次。
(2)我發現有的時候 $obj=(object)array(); 會報錯,必須寫非空的array()才不會。但是有的時候我又發現直接寫一句 $obj=(object)array(); 不會報錯,但是有的時候又會報錯。
如果$obj已是引用,或能會報錯。正常情況,不報錯。 這一點自已測試看看吧! 看手冊的例子了。
(3)關於函數內引用傳遞的 在函數內使用global &$var; 立即報錯。那個 & 和 $var 之間是否要空格?還是 & 和$var串連在一起。
global本身就是引用,不需要& .
(4)函數引用傳遞的問題。只知道變數引用傳遞是在函數內變動,那麼函數外的也變了。那函數引用傳遞是什麼作用?一直難以理解…………
如果變數沒有聲明,自動建立。 作用很簡單啊,正常情況下,變數在函數內是局變的。 引用可以直接操作全域的變數。
以前特點是對象引用很有意義。 但php5之 ,所有對象都是本身就是引用方式傳參的。用不用都行了。 只有變數引用才有意義。
這在設計模式時很有意義,你可以方便地將對象傳給任何其他對象。 引用來引用去!
先結貼了。對於 function 的引用傳遞不是很理解。~