2 つの別個の PHP ファイル: PhpGlobal.php と PhpStatic.php
PhpGlobal.php の全内容:
<?php/*$FileName : PhpGlobal.php$Output:>>>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 '<hr />';print_r( $censorCount );
コードを注意深く読んでいませんが、コードをファイルに書き込むか、データベースを使用して保存することを検討してください
$センサーCount = (object)array( 'banned' => 0, 'mod'=> 0,'filter' => 0);
割り当ては、たとえ実装されていても見栄えが悪いので、書き直してください。それはクラス形式で行われます。
<?php/*$FileName : PhpStatic.php$output>>>Array( [title] => **nima**韩国比日本牛鼻吗? [content] => 韩国比日本牛鼻吗?WHOSAIDSO?WHO !WHO! [author] => 韩国比)<hr /><b>0</b>*/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 '<hr />';echo "<b>$cc</b>";print_r( $censorCount );
PHP コード
function censorCount(&$string='') {
static $cenCount;
static $cc = 0;
if(empty($string)) return $cenCount; //ここに注意してください
if(empty($センサーCount)) $センサーCount = (object)array('bann...
ありがとうございます。
ただし、$cc 変数の値は変更されていません。
さらに、質問があります
(1) 関数で static を使用する場合、その変数は事前に宣言する必要がありますか?
$obj=(object)array(); が発生することがあります。エラーを報告します。空でない array() を書くと機能しません。ただし、
$obj=(object)array(); を直接書くとエラーが報告されない場合があります。
(3) について。 global &$var; を関数内で使用すると、すぐにエラーが報告されます。 & と
$var の間にスペースはありますか? それとも & と $var を接続する必要がありますか? (4) 関数参照の受け渡し 問題は、変数参照の転送が関数内で行われることだけがわかっていることですが、関数参照の転送はどのような役割を果たしているのでしょうか?もちろん私はあまり使いません &$var にはスペースは必要ありません オブジェクトでは関数参照の戻りがよくあります。たとえば、オブジェクトへの参照がたくさんあり、使用後にそれをクリーンアップしたいとします。 &. を使用して $test=null を使用することもできます 私もこの問題を抱えています! マニュアルをよく読んで、例文を一文ずつ見てください
コードが長すぎます
静的とは宣言を意味し、一度だけ割り当てることもできます
すでに引用するとエラーになる可能性があります。通常、エラーは報告されません。これを自分でテストして確認してください。例についてはマニュアルを参照してください。
(3) 関数内での参照転送については、関数内でグローバル &$var; を使用して即時にエラーを報告します。 &と$varの間にスペースはありますか?それでも & と $var は接続されています。
global 自体は参照なので & は必要ありません
(4) 関数参照の受け渡しの問題。変数参照の転送が関数内で変化することだけがわかっているため、関数の外の変数も変化します。では、関数参照の受け渡しは何をするのでしょうか?いつも理解するのが難しいです...
変数が宣言されていない場合は、自動的に作成されます。この関数は非常に単純です。通常の状況では、変数は関数内でローカルに変更されます。参照はグローバル変数を直接操作できます。
以前の機能は、オブジェクト参照が意味をなすということでした。しかし、php5 では、すべてのオブジェクトは参照によって渡されます。使うか使わないかは関係ありません。変数参照のみが意味を持ちます。
これは、オブジェクトを他のオブジェクトに簡単に渡すことができるパターンを設計するときに理にかなっています。引用して引用してください!
まずは縛ってみます。関数の参照渡しがよくわかりません。 〜