php语言:静态变量与方法与phar的使用
小标 2018-07-26 来源 : 阅读 1160 评论 0

摘要:本文主要向大家介绍了php语言:静态变量与方法与phar的使用,通过具体的内容向大家展示,希望对大家学习php语言有所帮助。

本文主要向大家介绍了php语言:静态变量与方法与phar的使用,通过具体的内容向大家展示,希望对大家学习php语言有所帮助。

本节用类与静态变量改造之前的例子: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

<?phprequire "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$ lsdone  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$ lsdone  ghost  ghostinit.php

ghostwu@dev:~/php/php1/3$ ./ghost make

 

ghostwu@dev:~/php/php1/3$ lsdone  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

<?phprequire "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允许动态增加成员变量(类的属性)

<?phpclass 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;

        }

以上就介绍了PHP的相关知识,希望对PHP有兴趣的朋友有所帮助。了解更多内容,请关注职坐标编程语言PHP频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved