欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

沈逸老师PHP魔鬼特训笔记(4)

程序员文章站 2022-04-26 10:23:34
...
上一课我们通过shell脚本拷贝代码,了解了静态方法和静态属性。(还有个附件PHAR包,我直接无视了)

然后在GOD文件中写了一些参数,

沈逸老师PHP魔鬼特训笔记(4)

  我们也可以这样,把方法名像拼凑字符串一样拼起来。

 $get_param=$argv[1];
 godinit::$get_param();

  好,下面我们还是按照老师课程,进行需求实现:如果参数带“-”,那么说明就是属性。直接调用类的静态属性。如果不带“-”,那么说明是方法,我们直接调用类的静态方法。

  于是,我先把上节课写过的god文件改成下面这样:

#!/usr/local/bin/php
php

require('god_func7');
require("godinit.php");

    $result='';
    if($argc>=2)
    {     
        /*'-v'==$argv[1]  && $result=godinit::$V;
        'make'==$argv[1]  && $result=godinit::make();
        'init'==$argv[1] && $result=godinit::init();*/
        $p = $argv[1];  //获取参数
        if(substr($p,0,1)=='-')     //  代表获取并匹配变量,
        {
          //如果传过来的是-v,就会变成v
          $p = substr($p,1);
           $result = godinit::$$p;
        }else{
            $result = godinit::$p();
        }
    }
echo $result;
echo PHP_EOL;
?>

  结果如下图:

  沈逸老师PHP魔鬼特训笔记(4)

  沈逸老师PHP魔鬼特训笔记(4)

  我们回到上面的命令行,如果随便输出一个非-v的字符,就会出现错误,所以我们还需要把代码完善下。 

$p = $argv[1];  //获取参数
if(substr($p,0,1)=='-')     //  代表获取并匹配变量,
    {
      //如果传过来的是-v,就会变成v
        $p = substr($p,1);
        $result =isset(godinit::$$p)?godinit::$p:error;
    }else{
        $result = godinit::$p();
    }  

  这里我们将要用到一个PHP魔法函数 __callStatic($m,$args) 。这个方法如果你要用,必须写到类里面,且必须是static。它的作用是,如果你调用了一个未定义的静态方法,则会自动触发这个函数。 第一个参数是 方法名,第二个参数是方法参数。我们可以用它来做一个容错处理(只要学到这个地步),在godinit文件中,我们加入这个方法:

static function __callStatic($p1,$p2){
    echo '$p1';
}

  然后,我们看看结果:

  沈逸老师PHP魔鬼特训笔记(4)

  现在再来看一般类定义和实例化以及调用,在我们新建一个godconfig文件,创建一个只有属性的godconfig类

php
class godconfig
{
    public $prj_name;
    public $prj_author;
    
}
?>

  在godinit里的实例化类godconfig,使用 1、json_encode(实例化过后的类):返回一个json格式的字符串 2、json_decode(json字符串) : 返回一个对象。

php

require('godconfig.php');                //引入gonconfig这个文件
class godinit                           //创建一个类,godinit
{
    static  $v="god version is 1.2";     //声明一个静态属性$VERSION

    static function init()               //静态方法 init
    {
        $gc = new godconfig();          //实例化godconfig里定义的类
        echo "input your project name?".PHP_EOL;
        $gc -> prj_name = fgets(STDIN);            //从标准输入中获取用户输入的字符并赋值给实例化属性$prj_name

        echo "input your author name?".PHP_EOL;
        $gc -> prj_author=fgets(STDIN);

        $ret = array();                 //初始化一个数组;
        $ret[] = $gc;
        echo json_encode($ret);
        //return ""
    }
    static function __callStatic($p1,$p2){
        echo "error function";
    }
}
?>

  然后我们看结果:

  沈逸老师PHP魔鬼特训笔记(4)

恶补几个简单的知识点:

()?():();

substr();

isset();

__callStatic($m,$args) 

json_encode()

json_decode()

版权声明:笔记整理者亡命小卒热爱*,崇尚分享。但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的《 PHP魔鬼训练课第一阶段》。本学习笔记小卒于博客园首发, 如需转载请尊重老师劳动,保留沈逸老师署名以及课程来源地址。

上一课:沈逸老师PHP魔鬼特训笔记(3)

下一课: