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 ...
随机推荐
- 计算机中的K、M、G、T到底指的是
计算机语言是二进制数字01组成. 在计算机工作中,2的10次方用K(kilo)表示,2的20次方用M(mega)表示,2的30次方用G(giga)表示,2的40次方用T(tera)表示.因此,4K=2 ...
- hashMap tableSizeFor 实现原理
基于jdk1.8 hashMap实现,要求容量大小是2的整次方,例如:2/4/8/16/32/64/128...,而不能是中间的某个值.这是为什么呢? map是数组+链表的数据结构,读写数据都需要首先 ...
- Docker - 基础讲义
Docker Docker - 官网 Docker - Hub GitHub - Docker dockerinfo Docker中文社区 Docker入门教程 Docker从入门到实践 虚拟化技术 ...
- Eleasticsearch启动失败问题解决
问题: [root@dnode1 bin]# ./elasticsearch -d [root@dnode1 bin]# Exception in thread "main" ja ...
- 课程二(Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization),第三周(Hyperparameter tuning, Batch Normalization and Programming Frameworks) —— 2.Programming assignments
Tensorflow Welcome to the Tensorflow Tutorial! In this notebook you will learn all the basics of Ten ...
- 图片训练:使用卷积神经网络(CNN)识别手写数字
这篇文章中,我们将使用CNN构建一个Tensorflow.js模型来分辨手写的数字.首先,我们通过使之“查看”数以千计的数字图片以及他们对应的标识来训练分辨器.然后我们再通过此模型从未“见到”过的测试 ...
- 平衡二叉树-AVL树(LL、RR、LR、RL旋转)
平衡二叉树的定义: 任意的左右子树高度差的绝对值不超过1,将这样的二叉树称为平衡二叉树,二叉平衡树前提是一个二叉排序树. 平衡二叉树的插入: 二叉平衡树在插入或删除一个结点时,先检查该操作是否导致了树 ...
- android的电话监听
android的电话监听 新建一个项目,结构图如下: PhoneService: package com.demo.tingdianhua; import android.app.Service; i ...
- CSS动画原理及硬件加速
一.图层 图层即层叠上下文,具体概念和应用大家可以看我之前转自张鑫旭大神博客的<CSS层叠上下文和层叠顺序>,这里我们简单复习一下产生层叠上下文的原因. 1.根层叠上下文 指的是页面根元素 ...
- How to set background image to a LinearLayout using Android-Universal-Image-Loader ? #594
You can do it by 2 ways: use loadImage(...) and set layout background in listener (ImageLoadingListe ...