ホームページ >バックエンド開発 >PHPチュートリアル >これが XML に書き込まれ、$this->lastmatch[0] で関数呼び出しが見られないのはなぜですか?リターンは機能を終了しました

これが XML に書き込まれ、$this->lastmatch[0] で関数呼び出しが見られないのはなぜですか?リターンは機能を終了しました

WBOY
WBOYオリジナル
2016-06-20 12:52:111119ブラウズ

class Conf{    private $file;    private $xml;    private $lastmatch;        function __construct($file){        $this->file = $file;        $this->xml =simplexml_load_file($file);    }        function write(){        file_put_contents($this->file,$this->xml->asXML());    }        function get($str){        $matches = $this->xml->xpath("/conf/item[@name=\"$str\"]");         if (count($matches)){           $this->lastmatch = $matches[0];           return (string) $matches[0];	       }    }        function set($key,$value){        if (!is_null($this->get($key))){        	  $this->lastmatch[0] = $value;  //这个为什么会写入xml,$this->lastmatch[0]没有看到函数调用?return已经结束函数返回了        	  return;        }        $conf = $this ->xml ->conf;        $this->xml->addChild('item',$value)->addAttribute('name',$key);    }}$conf = new Conf('conf.xml');$conf->set('user','test');$conf->write();

<?xml version="1.0" encoding="utf-8"?><conf>          <item name="user">bob</item>		  <item name="pass">newpass</item>	  <item name="host">localhost</item></conf>

これが XML に書き込まれているのに、$this->lastmatch[0] に関数呼び出しが見られないのはなぜですか? return 関数は終了しました


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

書き込みはありません!
xml には
71b0e47200fe5973ccea2b959fbc14b9test6d04af7aa1cc3096ed7e7b950e1ecf7f
ノード


はありませんが、元のファイルは確かに変更されています。

ああ、間違った情報を提供したのですが、メイン投稿の最後の XML が結果だと思いましたか?

それではテストしてみましょう

    function get($str){echo $str; // user        $matches = $this->xml->xpath("/conf/item[@name=\"$str\"]");         if (count($matches)){           $this->lastmatch = $matches[0];print_r($matches[0]);/*userSimpleXMLElement Object(    [@attributes] => Array        (            [name] => user        ))*/           return (string) $matches[0];          }    }

if (!is_null( $this->get($key))){
$this->get($key) が String user を返しました
つまり、is_null は false を返します
そして、それを否定して true になります

条件式が true なので、分岐に入って代入演算を実行するのが自然です

章より17 19行目と19行目
$matches = $this->xml->xpath("/conf/item[@name="$str"]");
$this->lastmatch = $一致 [0];


$this->lastmatch[0] は $this->xml->xpath への参照です (xpath メソッドは SimpleXMLElement オブジェクトのコレクションを返します)

PHP の場合
変数 = オブジェクト
変数はオブジェクトへの参照であり、コピーではありません

わかりました、ありがとう

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。