沈逸老师PHP魔鬼特训笔记(4)
2016-08-29 16:59
176 查看
上一课我们通过shell脚本拷贝代码,了解了静态方法和静态属性。(还有个附件PHAR包,我直接无视了)
然后在GOD文件中写了一些参数,
我们也可以这样,把方法名像拼凑字符串一样拼起来。
好,下面我们还是按照老师课程,进行需求实现:如果参数带“-”,那么说明就是属性。直接调用类的静态属性。如果不带“-”,那么说明是方法,我们直接调用类的静态方法。
于是,我先把上节课写过的god文件改成下面这样:
结果如下图:
我们回到上面的命令行,如果随便输出一个非-v的字符,就会出现错误,所以我们还需要把代码完善下。
这里我们将要用到一个PHP魔法函数 __callStatic($m,$args) 。这个方法如果你要用,必须写到类里面,且必须是static。它的作用是,如果你调用了一个未定义的静态方法,则会自动触发这个函数。 第一个参数是 方法名,第二个参数是方法参数。我们可以用它来做一个容错处理(只要学到这个地步),在godinit文件中,我们加入这个方法:
然后,我们看看结果:
现在再来看一般类定义和实例化以及调用,在我们新建一个godconfig文件,创建一个只有属性的godconfig类
在godinit里的实例化类godconfig,使用 1、json_encode(实例化过后的类):返回一个json格式的字符串 2、json_decode(json字符串) : 返回一个对象。
然后我们看结果:
恶补几个简单的知识点(参考php.net手册):
1、三元条件运算符
如果第一个子表达式的值是
2、substr();
string substr ( string
参数:
如果
如果
如果
如果提供了正数的
如果提供了负数的
如果提供了值为 0,
如果没有提供
3、isset();
bool isset ( mixed
如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成
返回值:如果
4、__callStatic($m,$args)
方法重载:public mixed __call ( string
public static mixed __callStatic ( string
$name 参数是要调用的方法名称。$arguments 参数是一个枚举数组,包含着要传递给方法 $name 的参数。
5、json_encode()
string json_encode ( mixed
参数:
返回值:成功则返回 JSON 编码的 string 或者在失败时返回
版权声明:笔记整理者亡命小卒热爱自由,崇尚分享。但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的《 PHP魔鬼训练课第一阶段》。本学习笔记小卒于博客园首发, 如需转载请尊重老师劳动,保留沈逸老师署名以及课程来源地址。
上一课:沈逸老师PHP魔鬼特训笔记(3)
下一课:沈逸老师PHP魔鬼特训笔记(5)
然后在GOD文件中写了一些参数,
我们也可以这样,把方法名像拼凑字符串一样拼起来。
$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; ?>
结果如下图:
我们回到上面的命令行,如果随便输出一个非-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'; }
然后,我们看看结果:
现在再来看一般类定义和实例化以及调用,在我们新建一个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.net手册):
1、三元条件运算符
$first ? $second : $third;
如果第一个子表达式的值是
TRUE(非零),那么计算第二个子表达式的值,其值即为整个表达式的值。否则,将是第三个子表达式的值。具体实例就不举了,请自行查看手册。
2、substr();
string substr ( string
$string, int
$start[, int
$length] ) 返回字符串
string由
start和
length参数指定的子字符串。
参数:
string输入字符串。必须至少有一个字符。
start
如果
start是非负数,返回的字符串将从
string的
start位置开始,从 0 开始计算。例如,在字符串 “abcdef” 中,在位置 0 的字符是 “a”,位置 2 的字符串是 “c” 等等。
如果
start是负数,返回的字符串将从
string结尾处向前数第
start个字符开始。
如果
string的长度小于
start,将返回
FALSE。
length
如果提供了正数的
length,返回的字符串将从
start处开始最多包括
length个字符(取决于
string的长度)。
如果提供了负数的
length,那么
string末尾处的许多字符将会被漏掉(若
start是负数则从字符串尾部算起)。如果
start不在这段文本中,那么将返回一个空字符串。
如果提供了值为 0,
FALSE或
NULL的
length,那么将返回一个空字符串。
如果没有提供
length,返回的子字符串将从
start位置开始直到字符串结尾。
3、isset();
bool isset ( mixed
$var[, mixed
$...] ) 检测变量是否设置,并且不是
NULL。
如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成
NULL的变量,将返回
FALSE。同时要注意的是一个
NULL字节("\0")并不等同于 PHP 的
NULL常数。
返回值:如果
var存在并且值不是
NULL则返回
TRUE,否则返回
FALSE。
4、__callStatic($m,$args)
方法重载:public mixed __call ( string
$name, array
$arguments) 在对象中调用一个不可访问方法时,__call() 会被调用。
public static mixed __callStatic ( string
$name, array
$arguments) 用静态方式中调用一个不可访问方法时,__callStatic() 会被调用。
$name 参数是要调用的方法名称。$arguments 参数是一个枚举数组,包含着要传递给方法 $name 的参数。
<?php //例子 class MethodTest { public function __call($name, $arguments) { // 注意: $name 的值区分大小写 echo "Calling object method '$name' " . implode(', ', $arguments). "\n"; } /** PHP 5.3.0之后版本 */ public static function __callStatic($name, $arguments) { // 注意: $name 的值区分大小写 echo "Calling static method '$name' " . implode(', ', $arguments). "\n"; } } $obj = new MethodTest; $obj->runTest('in object context'); MethodTest::runTest('in static context'); // PHP 5.3.0之后版本 ?>
5、json_encode()
string json_encode ( mixed
$value[, int
$options= 0 [, int
$depth= 512 ]] ),返回
value值的 JSON 形式 。该方法对变量进行 JSON 编码。
参数:
value:
待编码的
value,除了resource 类型之外,可以为任何数据类型。该函数只能接受 UTF-8 编码的数据
depth:
设置最大深度。 必须大于0。
返回值:成功则返回 JSON 编码的 string 或者在失败时返回
FALSE。
//json_encode()简单实例 <?php $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); echo json_encode($arr); ?> //返回结果:{"a":1,"b":2,"c":3,"d":4,"e":5}
版权声明:笔记整理者亡命小卒热爱自由,崇尚分享。但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的《 PHP魔鬼训练课第一阶段》。本学习笔记小卒于博客园首发, 如需转载请尊重老师劳动,保留沈逸老师署名以及课程来源地址。
上一课:沈逸老师PHP魔鬼特训笔记(3)
下一课:沈逸老师PHP魔鬼特训笔记(5)
相关文章推荐
- 沈逸老师PHP魔鬼特训笔记(7)--我叫什么名字
- 沈逸老师PHP魔鬼特训笔记(11)
- 沈逸老师PHP魔鬼特训笔记(9)--进化
- 沈逸老师PHP魔鬼特训笔记(3)
- 沈逸老师PHP魔鬼特训笔记(6)--巫术与骨架
- 沈逸老师PHP魔鬼特训笔记(12\13) --异形
- 沈逸老师PHP魔鬼特训笔记(2)
- 沈逸老师PHP魔鬼特训笔记(10)
- PHP自学笔记 ---李炎恢老师PHP第一季 TestGuest0.5
- PHP自学笔记 ---李炎恢老师PHP第一季 TestGuest0.6
- 编译原理学习笔记05——(识别孙悟空72变之魔鬼特训—递归下降分析程序构造)——2014_1_20
- PHP自学笔记 ---李炎恢老师PHP第一季 TestGuest0.8
- 沈逸老师ubuntu速学笔记(1)--安装flashplayer,配置中文输入法以及常用命令
- PHP自学笔记 ---李炎恢老师PHP第一季 TestGuest0.7
- 学李炎恢老师的PHP第一季 笔记 多用户留言系统-TestGuest0.2
- 沈逸老师ubuntu速学笔记(2)-- ubuntu16.04下 apache2.4和php7结合编译安装,并安裝PDOmysql扩展
- PHP自学笔记 ---李炎恢老师PHP第一季 TestGuest1.1 密码处理+1.2可选验证