ホームページ > バックエンド開発 > PHPチュートリアル > [専門家の方はもっと近づいてください] PHP [グローバル参照の受け渡し] と [静的静的変数] が機能しません

[専門家の方はもっと近づいてください] PHP [グローバル参照の受け渡し] と [静的静的変数] が機能しません

WBOY
リリース: 2016-06-23 14:06:36
オリジナル
819 人が閲覧しました

2 つの別個の PHP ファイル: PhpGlobal.phpPhpStatic.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 );
ログイン後にコピー





PhpStatic.php の全内容:
れーい

私は今重要なことは、テスト結果はテストごとに蓄積されるということです。
文字列フィルタリング機能に取り組んでいますが、内部の検出結果はカウントされません。つまり、プログラムがすべての検出を完了した後にカウントされ、MODの総数、禁止された数、フィルターの数がカウントされます。しかし、静的静的変数グローバル導入渡しも機能しません。


ディスカッションへの返信 (解決策)

コードを注意深く読んでいませんが、コードをファイルに書き込むか、データベースを使用して保存することを検討してください

$センサー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 を使用することもできます 私もこの問題を抱えています! マニュアルをよく読んで、例文を一文ずつ見てください
コードが長すぎます

(1) で使用されている場合。静的関数の場合、その変数は事前に宣言する必要はありませんか?


静的とは宣言を意味し、一度だけ割り当てることもできます

(2) $obj=(object)array(); であることがわかりました。空でない array() を書くとエラーが報告されることがありますが、 $obj=(object)array(); と書くとエラーが報告されることがあります


すでに引用するとエラーになる可能性があります。通常、エラーは報告されません。これを自分でテストして確認してください。例についてはマニュアルを参照してください。

(3) 関数内での参照転送については、関数内でグローバル &$var; を使用して即時にエラーを報告します。 &と$varの間にスペースはありますか?それでも & と $var は接続されています。

global 自体は参照なので & は必要ありません

(4) 関数参照の受け渡しの問題。変数参照の転送が関数内で変化することだけがわかっているため、関数の外の変数も変化します。では、関数参照の受け渡しは何をするのでしょうか?いつも理解するのが難しいです...

変数が宣言されていない場合は、自動的に作成されます。この関数は非常に単純です。通常の状況では、変数は関数内でローカルに変更されます。参照はグローバル変数を直接操作できます。

以前の機能は、オブジェクト参照が意味をなすということでした。しかし、php5 では、すべてのオブジェクトは参照によって渡されます。使うか使わないかは関係ありません。変数参照のみが意味を持ちます。

これは、オブジェクトを他のオブジェクトに簡単に渡すことができるパターンを設計するときに理にかなっています。引用して引用してください!



まずは縛ってみます。関数の参照渡しがよくわかりません。 〜

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート