zoukankan      html  css  js  c++  java
  • php静态变量与方法与phar的使用

    本节用类与静态变量改造之前的例子:php根据命令行参数生成配置文件

    ghostinit.php:

    <?php
        
        class ghostinit{
            static $version = 'ghost version is 1.1';
            static $projName = '';
            static $author = 'ghostwu';
            static function init(){
                echo "pls input project name?" . PHP_EOL;
                self::$projName = fgets( STDIN );
    
                echo "pls input author?" . PHP_EOL;
                self::$author = fgets( STDIN );
                
                echo "您输入的项目信息如下:" . PHP_EOL;
                echo self::$projName . PHP_EOL;
                echo self::$author . PHP_EOL;
            }    
    
            static function make(){
                $pchar=new Phar("ghost.phar");
                $pchar->buildFromDirectory(dirname(__FILE__));
                $pchar->setStub($pchar->createDefaultStub('ghost'));
                $pchar->compressFiles(Phar::GZ);        
            }
        }
    
    ?>

    ghost:

    #!/usr/bin/php
    <?php
    require "ghostinit.php";
    
    $result = '';
    
    if( $argc >= 2 ) {
        $argv[1] == '-v' && $result = ghostinit::$version;
        $argv[1] == 'make' && ghostinit::make();
        $argv[1] == 'init' && ghostinit::init();
    }
    
    echo $result . PHP_EOL;

    执行结果:

    ghostwu@dev:~/php/php1/3$ ls
    done  ghost  ghostinit.php
    ghostwu@dev:~/php/php1/3$ ./ghost init
    pls input project name?
    test
    pls input author?
    ghostwu
    您输入的项目信息如下:
    test
    
    ghostwu
    
    
    ghostwu@dev:~/php/php1/3$ ls
    done  ghost  ghostinit.php
    ghostwu@dev:~/php/php1/3$ ./ghost make
    
    ghostwu@dev:~/php/php1/3$ ls
    done  ghost  ghostinit.php  ghost.phar
    ghostwu@dev:~/php/php1/3$ ./ghost -v
    ghost version is 1.1
    ghostwu@dev:~/php/php1/3$ 

    callstatic继续改造:

    ghostinit.php:

    <?php
        
        class ghostinit{
            static $v = 'ghost version is 1.1';
            static $projName = '';
            static $author = 'ghostwu';
            static function init(){
                echo "pls input project name?" . PHP_EOL;
                self::$projName = fgets( STDIN );
    
                echo "pls input author?" . PHP_EOL;
                self::$author = fgets( STDIN );
                
                echo "您输入的项目信息如下:" . PHP_EOL;
                echo self::$projName . PHP_EOL;
                echo self::$author . PHP_EOL;
            }    
    
            static function make(){
                $pchar=new Phar("ghost.phar");
                $pchar->buildFromDirectory(dirname(__FILE__));
                $pchar->setStub($pchar->createDefaultStub('ghost'));
                $pchar->compressFiles(Phar::GZ);        
            }
    
            static function __callstatic( $m, $args ){
                echo 'error function';
            }
    
        }
    
    ?>

    ghost:

    #!/usr/bin/php
    <?php
    require "ghostinit.php";
    
    $result = '';
    
    if( $argc >= 2 ) {
        $p = $argv[1]; 
        if( substr( $p, 0, 1 ) == '-' ) {
            $p = substr( $p, 1 );
            $result = isset( ghostinit::$$p ) ? ghostinit::$$p : 'error';
        }else {
            $result = ghostinit::$p();
        }
    }
    
    echo $result . PHP_EOL;

     把配置独立成一个类

    ghostconfig.php:   把这两个属性注释,也可以正常运行, php允许动态增加成员变量(类的属性)

    <?php
    class ghostconfig{
        public $projName;
        public $author;
        
    }

    ghostinit.php

    <?php
        require( "ghostconfig.php" );    
    
        class ghostinit{
            static $v = 'ghost version is 1.1';
    
            static function init(){
                $conf = new ghostconfig();
                echo "pls input project name?" . PHP_EOL;
                $conf->projName = fgets( STDIN );
    
                echo "pls input author?" . PHP_EOL;
                $conf->author = fgets( STDIN );
                
                echo "您输入的项目信息如下:" . PHP_EOL;
    
                echo json_encode( $conf );
            }    
    
            static function make(){
                $pchar=new Phar("ghost.phar");
                $pchar->buildFromDirectory(dirname(__FILE__));
                $pchar->setStub($pchar->createDefaultStub('ghost'));
                $pchar->compressFiles(Phar::GZ);        
            }
    
            static function __callstatic( $m, $args ){
                echo 'error function';
            }
    
        }
    
    ?>

     利用顶级类stdClass代替config类,这样就减少了一个类,这个config类目前只用到了一次,完全可以用stdClass再次简化

    <?php
    
        class ghostinit{
            static $v = 'ghost version is 1.1';
    
            static function init(){
                $conf = new stdClass();
                echo "pls input project name?" . PHP_EOL;
                $conf->projName = fgets( STDIN );
    
                echo "pls input author?" . PHP_EOL;
                $conf->author = fgets( STDIN );
                
                echo "您输入的项目信息如下:" . PHP_EOL;
    
                echo json_encode( $conf );
            }    
    
            static function make(){
                $pchar=new Phar("ghost.phar");
                $pchar->buildFromDirectory(dirname(__FILE__));
                $pchar->setStub($pchar->createDefaultStub('ghost'));
                $pchar->compressFiles(Phar::GZ);        
            }
    
            static function __callstatic( $m, $args ){
                echo 'error function';
            }
    
        }
    
    ?>

     生成配置信息,再次简化,变成公共模块:

    static function init(){
                echo "pls input project name?" . PHP_EOL;
                $projName = fgets( STDIN );
    
                echo "pls input author?" . PHP_EOL;
                $author = fgets( STDIN );
                
                echo "您输入的项目信息如下:" . PHP_EOL;
    
                echo json_encode( self::getConfig( [ 'proj_name' => $projName, 'author' => $author ] ) );
            }    
    
            static function getConfig( $conf ){
                $std = new stdClass();
                foreach( $conf as $k => $v ){
                    $std->$k = $v;
                }
                return $std;
            }
  • 相关阅读:
    Mac-修改hosts文件(映射IP,取代网络DNS功能)
    iOS-内购及订阅
    Win-Navicat Premium 15 Window安装激活教程(学习研究)
    iOS-KLGenerateSpamCode(记录图片配参)
    iOS-Button 图片与文字位置
    iOS-关于GCD信号量那些事儿
    Mac-MacOS降级(Mac系统降级,系统回退)
    Xcode-一些小问题(配置包路径,配置文件路径。。。)
    Mac-App Store 购买过程中出错 请求超时
    2019 工作总结(APP组)
  • 原文地址:https://www.cnblogs.com/ghostwu/p/8922091.html
Copyright © 2011-2022 走看看