在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
上一课我们通过shell脚本拷贝代码,了解了静态方法和静态属性。(还有个附件PHAR包,我直接无视了) 然后在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、三元条件运算符 如果第一个子表达式的值是 2、substr();
string substr ( string
$string , int $start [, int $length ] ) 返回字符串 string 由 start 和 length 参数指定的子字符串。
参数:
如果 如果 如果 如果提供了正数的 如果提供了负数的 如果提供了值为 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 的参数。 <?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 参数:
返回值:成功则返回 JSON 编码的 string 或者在失败时返回 //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魔鬼特训笔记(5)
|
2022-08-30
2022-08-15
2022-08-17
2022-11-06
2022-08-18
请发表评论