类抛出错误和继承错误的子类方法,静态调用输出

<?php
class Conf{
	private $file;
	private $xml;
	private $lastmatch;
	
	function __construct($file){
		$this->file=$file;
		if(!file_exists($file)){
			throw new Exception("文件'".$file."'不存在");
		}
		$this->xml=simplexml_load_file($file,null,LIBXML_NOERROR);
		if(!is_object($this->xml)){
			throw new XmlException(libxml_get_last_error());
		}
		print gettype($this->xml)."<br>";
		
	}
	function write(){
		if(!is_writeable($this->file)){
			throw new Exception('文件{$this->file}不能写入');
		}
		file_put_contents($this->file,$this->xml->asXML());
	}
	function get($str){
		$matches=$this->xml->xpath("item[@name=\"$str\"]");
		if(count($matches)){
			$this->lastmatch=$matches[0];
			return (string)$matches[0];
		}
		return null;
	}
	function set($key,$value){
		if(!is_null($this->get($key))){
			$this->lastmatch[0]=$value;
			return;
		}
		$conf=$this->xml->conf;
		$re=$this->xml->addChild('item',$value);
		$re->addAttribute('name',$key);
	}
}
class XmlException extends Exception{
	private $error;
	function __construct(LibXmlError $error){
		$shortfile=basename($error->file);
		$msg="[{$shortfile},line{$error->line},col{$error->col}]{$error->message}";
		$this->error=$error;
		parent::__construct($msg,$error->code);
	}
	function getLibXmlError(){
		return $this->error;
	}
}
class Runner{
	static function init(){
		try{
			$conf=new Conf(dirname(__FILE__)."/simplexml.xml");
			echo "user:".$conf->get('user')."<br>";
			echo "host:".$conf->get('host')."<br>";
			$conf->set("pass","newpass");
			$conf->write();
		}catch(XmlException $e){
			throw new XmlException(libxml_get_last_error());
		}catch(FileException $e){
			throw new FileException(libxml_get_last_error());
		}
	}
}
Runner::init();
?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值