php静态变量与方法与phar的使用
2023-09-11 14:19:51 时间
本节用类与静态变量改造之前的例子: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; }
相关文章
- Can't find PHP headers in /usr/include/php
- RPC框架Thrift例子-PHP调用C++后端程序
- php之快速入门学习-17(PHP 命名空间)
- php之快速入门学习-16(PHP 魔术变量)
- 统计php程序运行时间及设置PHP最长运行时间
- PHP Closure(闭包)类详解
- PHP 协程示例A
- PHP 中 ini_set() 修改 php 内存限制及检查内存限制方法
- PHP中的反射
- PHP二分查找算法
- php变量和数据类型
- PHP 字符串的隐式转换规则以及针对包含字母的字符串的递增/递减操作
- Nginx + php-fpm 执行 PHP 脚本超时 报错 502 Bad Gateway + 504 Gateway Time-out 的解决办法
- PHP mkdir 方法 创建 0777 权限的目录问题
- PHP 错误与异常 笔记与总结(3)PHP 配置文件(php.ini)中与错误相关的选项 与 设置错误级别
- php中static静态关键字的使用
- PHP 经纬度坐标相关计算方法
- WDCP配置ThinkPHP5伪静态隐藏index.php,出现“”解决重定向次数过”问题
- php base64不能解码_PHP base64编码后解码乱码的解决办法
- php.ini中safe_mode开启之后对于PHP系统函数的影响
- PHP 字符串转 bigint 型md5
- (高级篇)php结合redis实现高并发下的抢购、秒杀功能
- PHP的mod_rewrite重写模块将.php后缀换成.html
- PHP通过phpspreadsheet读取Excel文件
- linux下无法执行PHP命令,错误 php: command not found
- php源码安全加密之PHP混淆算法.