Heim >Backend-Entwicklung >PHP-Tutorial >这个为什么会写入xml,$this->lastmatch[0]没有看到函数调用?return已经结束函数

这个为什么会写入xml,$this->lastmatch[0]没有看到函数调用?return已经结束函数

WBOY
WBOYOriginal
2016-06-20 12:52:111115Durchsuche

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 中并没有
test
节点


但是确实把原文件修改啦。

噢,你给出了错误的信息,我还以为主贴中最后的 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) 返回了字符串 user
所以 is_null 返回假
再取反就是真

既然条件表达式为真,那自然就进入分支,进行赋值操作啦

 从第17行和19行
$matches = $this->xml->xpath("/conf/item[@name=\"$str\"]");
 $this->lastmatch = $matches[0];


$this->lastmatch[0] 是 $this->xml->xpath的引用( xpath方法返回SimpleXMLElement object的集合)

PHP中
变量=对象
变量为对象的引用,而不是副本

我明白了,谢谢

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn