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)--我叫什么名字

最新文章

  1. python 爬虫(一)
  2. 【代码笔记】iOS-背景色随机显示
  3. CS:APP2e Y86处理器模拟器∗指南
  4. 织梦(dedecms) 5.7 /plus/car.php sql注入0day
  5. Android简单登陆页面
  6. LA 3882 And Then There Was One
  7. 基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏
  8. Dapper基础用法
  9. power desinger 学习笔记&lt;四&gt;
  10. delphi 修改代码补全的快捷键(由Ctrl+Space 改为 Ctrl + alt + Space)
  11. 安装sunvirtualbox
  12. n每个计数的概率和发生骰子--动态规划
  13. 试制品 (nyoj 542)
  14. 验证码的实现py3
  15. sklearn.linear_model.LogisticRegression参数说明
  16. Swagger 配置
  17. java获取上个星期第一天和最后一天
  18. K Nearest Neighbor 算法
  19. Image Base64 Datasnap Image delphi与c#互相兼容识别
  20. CentOS系统基础优化16条知识汇总

热门文章

  1. XML的特殊字符处理
  2. Database事件研究
  3. socket发送和接收数据
  4. HDU 5777 domino (排序,水题)
  5. 手把手教你玩转SOCKET模型之重叠I/O篇(下)
  6. How Tomcat Works(七)
  7. Android 保存联系人,包括部门\职位\传真\地址\照片
  8. iOS版本检测与版本升级
  9. 从scanf的学习接口设计
  10. 通过javascript完成分页查询功能