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;
}
php静态变量与方法与phar的使用的更多相关文章
- Objective-C 静态变量 使用方法
详解Objective-C中静态变量使用方法 Objective-C中静态变量使用方法是本文要介绍的内容,Objective-C 支持全局变量,主要有两种实现方式:第一种和C/C++中的一样,使用&q ...
- Qt中静态变量使用方法
静态变量可以在各个页面之前使用 先定义一个用于存放静态变量的类 例如datavar 在datavar.h中添加如下代码 #ifndef DATAVAR_H #define DATAVAR_H #inc ...
- js 写成类的形式 js 静态变量 js方法 属性 json类
function ClassStudentList() { //[{"Cid":"0d","Students":[{"Sid&qu ...
- PHP引用操作以及外部操作函数的局部静态变量的方法
通过引用方式在外部操作函数或成员方法内部的静态变量 下面举个简单的例子,说明三个关于引用方面的问题: 1. 参数引用后函数内进行类型转换同样是地址操作 2. 参数引用后再传递给其他函数时需要再次添加引 ...
- Spring注入静态变量的方法,以及CXF如何获取客户端IP
1.如果使用@Resource注解来注入静态变量的,服务器启动就会报错的.可以新增一个set方法,同时在set方法上用@Resource注解来注入. 2.或者直接在Spring的配置文件中使用< ...
- JVM存储位置分配——java中局部变量、实例变量和静态变量在方法区、栈内存、堆内存中的分配
Java中的变量根据不同的标准可以分为两类,以其引用的数据类型的不同来划分可分为“原始数据类型变量和引用数据类型变量”,以其作用范围的不同来区分可分为“局部变量,实例变量和静态变量”. 根据“Java ...
- Java中局部变量、实例变量和静态变量在方法区、栈内存、堆内存中的分配
转自:https://blog.csdn.net/leunging/article/details/80599282 感谢CSDN博主「leunging」的总结分享 ———————————————— ...
- Java中读取配置文件中的内容,并将其赋值给静态变量的方法
应用场景 项目开发中某个功能需要抽取成方法写成一个工具类,提供给别人使用.写过工具类的人都知道,工具类中的方法一般都是静态方法,可以直接使用类名点方法名调用, 使用很方便,比如判断某个对象是否为空的方 ...
- FreeMarker调用Java静态方法以及静态变量的方法
这里介绍下在类似 Spring+FreeMarker 的架构中如何在FreeMarker中访问Java中的静态方法以及静态变量. 一.首先为了方便以及可复用我们创建一个工具类 /** * FreeMa ...
随机推荐
- Spring学习笔记1——IOC: 尽量使用注解以及java代码
在实战中学习Spring,本系列的最终目的是完成一个实现用户注册登录功能的项目. 预想的基本流程如下: 1.用户网站注册,填写用户名.密码.email.手机号信息,后台存入数据库后返回ok.(学习IO ...
- 微信赌场——H5棋牌游戏渗透之旅
i春秋作家:F0rmat 0x01 前言 本来不想发的,涉及太多利益了,这些棋牌游戏的源码最高能卖到几万.开发起来不比一个商场程序难.最近又太忙了,没时间去做代码审计的文章了,但一不小心又抢了个运气王 ...
- Shell - 简明Shell入门03 - 字符串(String)
示例脚本及注释 #!/bin/bash str="Shell" str2="Hello $str !" str3="Hello ${str} !&qu ...
- [LeetCode] 反转整数
题目: 给定一个 32 位有符号整数,将整数中的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注 ...
- redo log文件格式描述
- odoo 开发基础 -- 视图之widget
Odoo 中的widget many2many_tags one2many_list selection progressbar selection statusbar handle monetary ...
- python 继承 多态
python 的继承 #-*- coding:utf-8 -*-class A(object): def __init__(self): print('A:我是肯定会执行的!!') def fun(s ...
- JavaSE-java8-谓词复合的用法
谓词接口包括三个方法: negate. and 和 or,让你可以重用已有的Predicate来创建更复杂的谓词 一.比如可以用negate方法来返回一个Predicate非 public class ...
- vuejs之Vue Devtools
Vue Devtools大法好 这是一篇小白friendly教程 Vue Devtools是一款谷歌浏览器插件,专门为调试vue而设计.假设你做了一个vue应用,当你在调试的过程中,打开的控制台是这样 ...
- Chapter 3 Phenomenon——24
My mom was in hysterics, of course. 我的母亲当时是歇斯底里的发疯了. I had to tell her I felt fine at least thirty t ...