zoukankan      html  css  js  c++  java
  • 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/10$ ls
    ghost  ghostinit.php
    ghostwu@dev:~/php/php1/10$ ./ghost init
    pls input project name?
    hello
    pls input author?
    ghostwu
    string(6) "hello
    "
    string(8) "ghostwu
    "
    39 bytes has written,config file has created
    
    ghostwu@dev:~/php/php1/10$ ls
    ghost  ghostinit.php  go.json
    ghostwu@dev:~/php/php1/10$ ./ghost start
    
    ghostwu@dev:~/php/php1/10$ ls
    ghost  ghostinit.php  go.json  hello
    ghostwu@dev:~/php/php1/10$ tree hello
    hello
    └── index.php
    
    0 directories, 1 file
    ghostwu@dev:~/php/php1/10$ 
    View Code

    用类来单独改造

    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( LibraryThinkphp.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/10$ tree
    .
    ├── core
    │   └── frame
    │       ├── ghost_frame.php
    │       └── template
    ├── ghost
    ├── ghostinit.php
    ├── go.json
    └── hello
        └── index.php

    完整的ghostinit.php

    <?php
        use coreframeghost_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 coreframeghost_frame( trim( $conf->proj ) );
                //用use引入命名空间 就不需要每次都加上命名空间去实例化类
                $gf = new ghost_frame( trim( $conf->proj ) );
            }
    
            static function __callstatic( $m, $args ){
                echo 'error function';
            }
    
        }
    
    ?>
    View Code

    ghost_frame.php

    <?php
        namespace coreframe;
        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', '' );
            }
    
        }
    ?>
    View Code

    最后的改造:

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

    ghost:

     1 #!/usr/bin/php
     2 <?php
     3 use coreghostinit;
     4 require_once( 'function.php' );
     5 $result = '';
     6 
     7 if( $argc >= 2 ) {
     8     $p = $argv[1]; 
     9     //如果以 '-' 开头, 表示属性
    10     if( substr( $p, 0, 1 ) == '-' ) {
    11         // -v变成v
    12         $p = substr( $p, 1 );
    13         $result = isset( ghostinit::$$p ) ? ghostinit::$$p : 'error';
    14     }else {
    15         $result = ghostinit::$p();
    16     }
    17 }
    18 
    19 echo $result . PHP_EOL;

    ghostinit.php

    namespace core;
        use coreframeghost_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 coreframeghost_frame( trim( $conf->proj ) );
                //用use引入命名空间 就不需要每次都加上命名空间去实例化类
                $gf = new ghost_frame( trim( $conf->proj ) );
            }
    
            static function __callstatic( $m, $args ){
                echo 'error function';
            }
    
        }
    View Code
  • 相关阅读:
    MySQL5.7的安装配置
    Curl工具的使用
    sublime text配置node.js调试
    Docker windows下安装并搭建Nodejs的webapp
    Django URLs error: view must be a callable or a list/tuple in the case of include()
    Windows下Django环境搭建
    vscode 调试node.js
    python的字节编译
    堡垒机实例以及数据库操作
    Django admin模块无法调用css样式文件
  • 原文地址:https://www.cnblogs.com/ghostwu/p/8970277.html
Copyright © 2011-2022 走看看