沈逸老师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、常量只能包含标量数据(boolean,integer,float 和 string)。
然后我们在刚才是实例中定义一个常量,把这个常量当做配置来使用,来我们试试看:
首先在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魔鬼特训笔记(6)--巫术与骨架的更多相关文章
- 沈逸老师PHP魔鬼特训笔记(10)
为了防止代码让我们混淆不清,大家看视频中的分离方法 1.新建了一个文件夹叫code (这代表是代码) 2.再新建一个文件夹叫page (这代表是页面) 代码该怎么写呢? 这里要记住口诀 1.index ...
- 沈逸老师PHP魔鬼特训笔记(9)--进化
回到第一课,我们学过PHP母体,了解过解析PHP程序.PHP其实内置了一个web服务器,专门给我们开发测试使用,那么接下来我们要完成的是:生成后创建一个web 服务,在浏览器中可以访问. PHP的母体 ...
- 沈逸老师PHP魔鬼特训笔记(8)
创建模板文件: 这节课老师带领我们开始创建TEMPLATE,按照老师教导的思路,我们希望这样一种代码写法:1.譬如我定义一个变量$name=‘’;2.然后呢我读取一个模板.3.再然后我在这个模板里 设 ...
- 沈逸老师PHP魔鬼特训笔记(7)--我叫什么名字
一.生成文件夹. mkdir():--新建目录 bool mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = false ...
- 沈逸老师PHP魔鬼特训笔记(5)
接上一节课,我们专门新建了一个godconfig类,设置了两个属性prj_name(项目名),prj_author(作者),然后我们获取标准输入(stdin)把结果保存在了类里面. 好吧,这节课的名字 ...
- 沈逸老师PHP魔鬼特训笔记(4)
上一课我们通过shell脚本拷贝代码,了解了静态方法和静态属性.(还有个附件PHAR包,我直接无视了) 然后在GOD文件中写了一些参数, 我们也可以这样,把方法名像拼凑字符串一样拼起来. $get_p ...
- 沈逸老师PHP魔鬼特训笔记(3)
一.由于上两节课我们把程序放到了/usr/local/bin里面.每次编辑需要sudo .这节课我们使用PHPSTORM来编辑代码,专门把它拷贝出来,然后放到一个叫做home/godpro的文件夹下. ...
- 沈逸老师PHP魔鬼特训笔记(1)
此课程个人开发环境可以考虑使用Ubuntu ,推荐sublime和PhpStorm作为开发环境.一.PHP的一大特性是:脚本语言.不要编译,写完就可以运行? 然而并不是....... PHP代码要想运 ...
- 沈逸老师PHP魔鬼特训笔记(2)
一.这一课会学习到几个懒人函数: 1.file_put_contents (PHP 5, PHP 7) file_put_contents — 将一个字符串写入文件 说明 int file_put_c ...
随机推荐
- USB -- scsi命令集
摘自:<圈圈教你玩usb> 241页 SCSI(small computer system interface)是小型计算机系统的缩写,有一套完整的协议规定其命令和命令数据的响应.scsi ...
- CTE初识
微软从SQl2005起引入了CTE(Common Table Expression)以强化T-SQL.这是一个类似于非持久视图的好东西. 正常的SQL语句: select * from person. ...
- Joel Spolsky对计算机学生的七大建议
/*先来介绍下作者:Joel Spolsky,世界最具影响的程序员网志Joel on Software的主人,软件业一位旗帜鲜明的思想者,一位传统软件管理理念的挑战者.他创办的这个网站被程序员誉为“反 ...
- bmp格式解析
最近一直在写图像处理的作业,好多啊 bmp格式简介 a.格式组成 1:位图头文件数据结构,它包含BMP图像文件的类型.显示内容等信息: 2:位图信息数据结构,它包含有BMP图像的宽.高.压缩方法,以及 ...
- 彻底解决cookie欺骗(有问题)
不要在公共场登陆 自己重要的用户名和密码: 不用的时候,[关闭浏览器],只点[退出],还是会有安全隐患.--没有绝对的安全由于http的无状态性,总不能每次访问页面都要输入用户名和密码,所以为了保持状 ...
- AUPE学习第八章------进程控制
每个进程都有一个非负整形表示的唯一进程ID. init进程是一号进程,是第一个用户态的进程.它负责内核启动以后启动一个unix系统, 它读取的配置文件一般在/etc/rc*./etc/inittab. ...
- asp获取勾选checkbox的值
Dim str_select str_select = CStr(request.Form("c_name")) c_name是checkbox的name
- JPA一对多和多对一关系
1-m:多的一方为关系维护端,关系维护端负责外键纪录的更新,关系被维护端没有权力更新外键纪录. 维护端注解 @OneToMany(cascade = { CascadeType.PERSIST, Ca ...
- Spring MVC防止数据重复提交
现实开发中表单重复提交的例子很多,就包括手上这个门户的项目也有这种应用场景,用的次数多,但是总结,这还是第一次. 一.基本原理 使用token,给所有的url加一个拦截器,在拦截器里面用java的UU ...
- 分享一个导出Excel时页面不跳转的小技巧
今天在点击客户档案导出的时候,发现先是打开了一个新标签,然后新标签自动关掉,弹出一个文件下载确认的窗口,点击确认后开始下载导出的Excel文件.这样的过程感觉窗口闪来闪去,而且可能会给用户带来困惑,是 ...