zoukankan      html  css  js  c++  java
  • 沈逸老师PHP魔鬼特训笔记(6)--巫术与骨架

    PHP最牛逼的特性之一除了懒人函数,还有一些魔法函数。

      首先我们来认识下__tostring,通过一个巫术方法,我们吧实例转化过后的类,直接当字符串输出。结合我们前面所做的功能,我们在类里面加上这个函数:

      在godinit文件中,我们将

    <?php
    
    require('godconfig.php');                    //引入gonconfig这个文件
    class godinit                                //创建一个类,godinit
    {
        static  $v="god version is 1.2";         //声明一个静态属性$VERSION
        static function init()                   //静态方法 init
        {
            echo "input your project name?".PHP_EOL; 
            $prj_name = fgets(STDIN);           //重新获取用户输入,并赋值给$prj_name  
            echo "input your author name?".PHP_EOL;
            $prj_author = fgets(STDIN);         //重新获取用户输入,并赋值给$prj_author
            echo TC(array('prj_name'=>$prj_name,'prj_author'=>$prj_author));
              //把json_encode()写入到__tostring方法去
        }

    static function __callStatic($p1,$p2){
    echo "error function";
    }
    }
    ?>

      在god_func7文件中写入__tostring方法

    <?php
    //functions for PHP7
    function genConfig($cnt):string
    {
        return file_put_contents(getcwd().'/god.json',$cnt).' of bytes is written.'.PHP_EOL.'god config is created';
    }
    function TC($p){
         return new class($p){          //this is 匿名类
             function __construct($p){
                 foreach ($p as $k => $v){
                     $this -> $k = $v;
                 }
             }
             function __tostring(){
                 return json_encode($this);
             }
         };
    }

      测试下结果,还是和原来一毛一样:

      

      师曰:我们又不是一定非要输出json,如果我们要把类输出成一段“SQL”呢?譬如自动拼接成一个SQL字符串 select prj_name,prj_author from table。这个问题我们先想想。

      现在我们先学习下PHP常量。what?突然冒出一个基础语法..好吧前面都是在讲基础语法,只是逼格比较高而已...

      定义常量:define(“name”,”value”);

       1、在设定以后,常量的值无法更改

      2、常量名不需要开头的美元符号($);

      3、作用域不影响对常量的访问。

      4、常量只能包含标量数据(booleanintegerfloatstring)。

      然后我们在刚才是实例中定义一个常量,把这个常量当做配置来使用,来我们试试看:

      首先在godinit这个文件的第一行定义个常量:

    define('cstring','json');

      然后我们在在god_func7文件中修改下__tostring方法:

    <?php
    //functions for PHP7
    function genConfig($cnt):string
    {
        return file_put_contents(getcwd().'/god.json',$cnt).' of bytes is written.'.PHP_EOL.'god config is created';
    }
    function TC($p){
         return new class($p){          //this is 匿名类
             function __construct($p){
                 foreach ($p as $k => $v){
                     $this -> $k = $v;
                 }
             }
             function __tostring(){
                 if(cstring == "json"){
                     return json_encode($this);
                 }else {
                     return "select prj_name,prj_author from table";
                 }
             }
         };
    
    }

      我们看下结果:

      

      把原来的常量改成:define('cstring','sql');

      

      下面,弄个实战需求继续学习。

      前面花了N多的时间做了一个配置文件的生成(god.json)。我们再来个需求:读取配置文件 。

      需求如下,当用户输入参数是“ini”的时候,我们就读取,并把里的参数内容打印到屏幕上。 

    //在godinit文件中我们新增一个方法
     function ini(){
           $get_config = loadConfig();
            foreach($get_config as $k=>$v)
                echo $k.":".$v;
     }

      然后在god_func7文件中同样也新增一个loadConfig()方法

    function loadConfig(){
        $get_file=file_get_contents(getcwd().'/god.json');
        return json_decode($get_file);
    }

      结果:

      

    好吧,写了这么多god,最终要干什么?老师在这节课揭晓了答案,是为了我们后面做网站时生成一个“开发骨架”。

    强化知识点:

    __tostring

    __get、

    __call、

    __set、

    __clone

    json_decode:

    file_get_contents:

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

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

    下一课:沈逸老师PHP魔鬼特训笔记(7)--我叫什么名字

  • 相关阅读:
    软件工程—附加作业
    软件工程最终总结
    电梯调度(两人结对)
    VS单元测试
    第二周作业(2,3题)
    VS的安装
    补救
    漂亮男孩不说谎
    博客带我成长
    Java后缀数组-求sa数组
  • 原文地址:https://www.cnblogs.com/xz1024/p/5822652.html
Copyright © 2011-2022 走看看