zoukankan      html  css  js  c++  java
  • PHP Exception

    PHP Exception

    官方文档:http://cn2.php.net/exceptions

    Deom 1

    <?php
    
    class Conf {
        private $file;
        private $xml;
        private $lastmatch;
    
        function __construct( $file ) {
            $this->file = $file;
            if ( ! file_exists( $file ) ) {
                throw new Exception( "file '$file' does not exist" );
            }
            $this->xml = simplexml_load_file($file);
        }    
    
        function write() {
            if ( ! is_writeable( $this->file ) ) {
                throw new Exception("file '{$this->file}' is not writeable");
            }
            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];
            }
            return null;
        }
    
        function set( $key, $value ) {
            if ( ! is_null( $this->get( $key ) ) ) {
                $this->lastmatch[0]=$value;
                return;
            }
            $conf = $this->xml->conf;
            $this->xml->addChild('item', $value)->addAttribute( 'name', $key );
        }
    }
    
    
    try {
        //$conf = new Conf( dirname(__FILE__)."/conf01.xml" );
        //$conf = new Conf( dirname(__FILE__)."/conf.unwriteable.xml" );
        $conf = new Conf( "nonexistent/not_there.xml" );
        print "user: ".$conf->get('user')."\n";
        print "host: ".$conf->get('host')."\n";
        $conf->set("pass", "newpass");
        $conf->write();
    } catch ( Exception $e ) {
        die( $e->__toString() );
    }
    
    ?>

    Deom 2

    <?php
    
    class XmlException extends Exception {
        private $error;
    
        function __construct( LibXmlError $error ) {
            $shortfile = basename( $error->file );
            print_r( $error );
            $msg = "[{$shortfile}, line {$error->line}, col {$error->column}] {$error->message}";
            $this->error = $error;
            parent::__construct( $msg, $error->code );
        }
    
        function getLibXmlError() {
            return $this->error;
        }
    }
    
    class FileException extends Exception { }
    class ConfException extends Exception { }
    
    class Conf {
        private $file;
        private $xml;
        private $lastmatch;
    
        function __construct( $file ) {
            $this->file = $file;
            if ( ! file_exists( $file ) ) {
                throw new FileException( "file '$file' does not exist" );
            }
            $this->xml = simplexml_load_file($file, null, LIBXML_NOERROR );
            if ( ! is_object( $this->xml ) ) {
                throw new XmlException( libxml_get_last_error() );
            }
            $matches = $this->xml->xpath("/conf");
            if ( ! count( $matches ) ) {
                throw new ConfException( "could not find root element: conf" );
            }
        }    
    
        function write() {
            if ( ! is_writeable( $this->file ) ) {
                throw new Exception("file '{$this->file}' is not writeable");
            }
            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];
            }
            return null;
        }
    
        function set( $key, $value ) {
            if ( ! is_null( $this->get( $key ) ) ) {
                $this->lastmatch[0]=$value;
                return;
            }
            $conf = $this->xml->conf;
            $this->xml->addChild('item', $value)->addAttribute( 'name', $key );
        }
    }
    
    
    class Runner {
        static function init() { 
            try {
                $conf = new Conf( dirname(__FILE__)."/conf.broken.xml" );
                print "user: ".$conf->get('user')."\n";
                print "host: ".$conf->get('host')."\n";
                $conf->set("pass", "newpass");
                $conf->write();
            } catch ( FileException $e ) {
                // permissions issue or non-existent file
                throw $e;
            } catch ( XmlException $e ) {
                // broken xml
            } catch ( ConfException $e ) {
                // wrong kind of XML file
            } catch ( Exception $e ) {
                // backstop: should not be called
            }
        }
    }
    
    Runner::init();
    
    ?>
  • 相关阅读:
    HDFS上传文件
    SparkStreaming和Kafka的整合
    hadoop ha集群搭建
    Zookeeper安装
    hadoop完全分布式集群的搭建
    hadoop伪分布式集群的搭建
    java笔记之字符串,gc
    java笔记之字符串,gc
    java基础之short案例分析以及final关键字
    java基础之short案例分析以及final关键字
  • 原文地址:https://www.cnblogs.com/Athrun/p/php__exception.html
Copyright © 2011-2022 走看看