• 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
  • 相关阅读:
    把函数作为参数,调用的时候,先判断这个参数是不是存在,然后调用函数的时候加上()
    @keyframes 和animation配合使用
    让sublime text3支持Vue语法高亮显示
    vue.js中的vue-cli中各个文件简单介绍
    函数节流
    Ajax原理
    Ajax同步
    判断数据类型的方法
    闭包的用途
    vue模板编译
  • 原文地址:https://www.cnblogs.com/ghostwu/p/8970277.html
Copyright © 2020-2023  润新知