接着这篇文章php命令行生成项目结构 继续改造:
ghostwu@dev:~/php/php1/12$ tree
.
├── app
│ └── index.php
├── core
│ ├── frame
│ │ ├── ghost_frame.php
│ │ └── template
│ │ └── index.tpl
│ └── ghostinit.php
├── function.php
├── ghost
└── go.json
index.tpl:
<?php echo '<?php' . PHP_EOL; ?>
/**
* project name: <?php echo $proj . PHP_EOL; ?>
* author: <?php echo $author . PHP_EOL; ?>
* date: <?php echo date('Y-m-d') . PHP_EOL; ?>
*
*/
echo "hello ghostwu";
生成的入口文件就是按照这个 模板解释的, 模板中的变量从go.json读取
ghostinit.php:
namespace core;
use core\frame\ghost_frame;
class ghostinit{
static $v = 'ghost version is 1.1'; static function init(){
echo "pls input project name?" . PHP_EOL;
$projName = fgets( STDIN ); echo "pls input author?" . PHP_EOL;
$author = fgets( STDIN ); echo self::buildConfig( [ 'proj' => $projName, 'author' => $author ] );
} static function buildConfig( $info ){
return file_put_contents( getcwd() . '/go.json', json_encode( $info ) ) . ' bytes has written,' . 'config file has created' . PHP_EOL;
} static function show(){
$conf = self::loadConfig();
foreach( $conf as $k => $v ){
echo $k . ':' . $v;
}
} static function loadConfig(){
return json_decode( file_get_contents( getcwd() . '/go.json' ) );
} static function start(){
$conf = self::loadConfig();
//$gf = new core\frame\ghost_frame( trim( $conf->proj ) );
//用use引入命名空间 就不需要每次都加上命名空间去实例化类
$gf = new ghost_frame( trim( $conf->proj ) );
$gf->proj = trim( $conf->proj );
$gf->author = trim( $conf->author );
$gf->run();
} static function __callstatic( $m, $args ){
echo 'error function';
} }
ghost_frame.php
namespace core\frame;
class ghost_frame{ public $proj = '';
public $entrace_file = ''; public function __construct( $proj ) {
$this->proj = $proj;
} public function run(){
$dir = getcwd() . '/' . $this->proj;
!file_exists( $dir ) && mkdir( $dir ); extract( get_object_vars( $this ) );
ob_start();
include( dirname( __FILE__ ) . '/template/index.tpl' );
$content = ob_get_contents();
ob_end_clean();
file_put_contents( $dir . '/index.php', $content );
} }
应用:
ghostwu@dev:~/php/php1/$ tree
.
├── core
│ ├── frame
│ │ ├── ghost_frame.php
│ │ └── template
│ │ └── index.tpl
│ └── ghostinit.php
├── function.php
└── ghost directories, files
ghostwu@dev:~/php/php1/$ ./ghost init pls input project name?
Application
pls input author?
ghostwu
bytes has written,config file has created ghostwu@dev:~/php/php1/$ tree
.
├── core
│ ├── frame
│ │ ├── ghost_frame.php
│ │ └── template
│ │ └── index.tpl
│ └── ghostinit.php
├── function.php
├── ghost
└── go.json directories, files
ghostwu@dev:~/php/php1/$ ./ghost start ghostwu@dev:~/php/php1/$ tree
.
├── Application
│ └── index.php
├── core
│ ├── frame
│ │ ├── ghost_frame.php
│ │ └── template
│ │ └── index.tpl
│ └── ghostinit.php
├── function.php
├── ghost
└── go.json directories, files
ghostwu@dev:~/php/php1/$ cat Application/index.php
<?php
/**
* project name: Application
* author: ghostwu
* date: 2018-04-29 *
*/
echo "hello ghostwu";
ghostwu@dev:~/php/php1/$