php命令行生成项目结构

时间:2023-03-09 20:10:45
php命令行生成项目结构

ghostinit.php

<?php
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 ); var_dump( $projName, $author ); 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();
$dir = getcwd() . '/' . trim( $conf->proj );
!file_exists( $dir ) && mkdir( $dir );
!file_exists( $dir . '/index.php' ) && file_put_contents( $dir . '/index.php', '' );
} static function __callstatic( $m, $args ){
echo 'error function';
} } ?>

用法:

ghostwu@dev:~/php/php1/$ ls
ghost ghostinit.php
ghostwu@dev:~/php/php1/$ ./ghost init
pls input project name?
hello
pls input author?
ghostwu
string() "hello
"
string() "ghostwu
"
bytes has written,config file has created ghostwu@dev:~/php/php1/$ ls
ghost ghostinit.php go.json
ghostwu@dev:~/php/php1/$ ./ghost start ghostwu@dev:~/php/php1/$ ls
ghost ghostinit.php go.json hello
ghostwu@dev:~/php/php1/$ tree hello
hello
└── index.php directories, file
ghostwu@dev:~/php/php1/$

用类来单独改造

ghost_frame.php

<?php
class ghost_frame{ public $proj = '';
public $entrace_file = ''; public function __construct( $proj ) {
$this->proj = $proj;
$dir = getcwd() . '/' . $proj;
!file_exists( $dir ) && mkdir( $dir );
!file_exists( $dir . '/index.php' ) && file_put_contents( $dir . '/index.php', '' );
} }
?>

ghostinit.php,由于调用了ghost_frame,需要在ghostinit.php中require这个文件

         static function start(){
$conf = self::loadConfig();
$gf = new ghost_frame( trim( $conf->proj ) );
}

当然我们可以用自动加载来改造

首先,建立框架的目录结构,类似于thinkphp( Library\Thinkphp.php )

ghostwu@dev:~/php/php1/10$ ls
core ghost ghostinit.php go.json hello
ghostwu@dev:~/php/php1/10$ tree core
core
└── frame
├── ghost_frame.php
└── template
ghostwu@dev:~/php/php1/$ tree
.
├── core
│   └── frame
│   ├── ghost_frame.php
│   └── template
├── ghost
├── ghostinit.php
├── go.json
└── hello
└── index.php

完整的ghostinit.php

<?php
use core\frame\ghost_frame;
function __autoload( $className ) {
$className = str_replace( '\\', '/', $className );
require( $className . '.php' );
}
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 ) );
} static function __callstatic( $m, $args ){
echo 'error function';
} } ?>

ghost_frame.php

<?php
namespace core\frame;
class ghost_frame{ public $proj = '';
public $entrace_file = ''; public function __construct( $proj ) {
$this->proj = $proj;
$dir = getcwd() . '/' . $proj;
!file_exists( $dir ) && mkdir( $dir );
!file_exists( $dir . '/index.php' ) && file_put_contents( $dir . '/index.php', '' );
} }
?>

最后的改造:

ghostwu@dev:~/php/php1/$ tree
.
├── core
│   ├── frame
│   │   ├── ghost_frame.php
│   │   └── template
│   └── ghostinit.php
├── function.php
├── ghost
├── go.json
└── hello
└── index.php

ghost:

 #!/usr/bin/php
<?php
use core\ghostinit;
require_once( 'function.php' );
$result = ''; if( $argc >= 2 ) {
$p = $argv[1];
//如果以 '-' 开头, 表示属性
if( substr( $p, 0, 1 ) == '-' ) {
// -v变成v
$p = substr( $p, 1 );
$result = isset( ghostinit::$$p ) ? ghostinit::$$p : 'error';
}else {
$result = ghostinit::$p();
}
} echo $result . PHP_EOL;

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 ) );
} static function __callstatic( $m, $args ){
echo 'error function';
} }