[开心学php100天]第四天:完爆php魔力函数
2013-07-11 10:03
288 查看
本期格言:
当我们天资不够强大时,与其花500%的精力做一个单线程技术高手,不如花较少的精力做一个聪明的多线程程序员。
本期扯淡:
湖南卫视的“我是歌手”第一季终结,歌王产生。也许很多人心目中的歌王都不一样,但是不可否认的是,羽泉确确实实得到了“官方”宣布和“大家都认可”的歌王,我个人分析原因如下:其实各个歌手实力都很强,各有特色,真没有歌王不歌王之分。如获得神给予天赋的林志炫、高音黄妈、全身都在摇滚的周晓鸥、细腻无比的杨宗纬以及其他各有特色的歌手。但是我个人认为只有羽泉是最聪明的歌手,论音色也许比不过林志炫、论感人也许比不过杨宗纬、论高音高不过妈、论摇滚得剃光头,所以羽泉采取的策略是把自己融入观众,而不是强迫观众融入他们的歌。最终在制胜局拿出最猛的杀手锏。
这里还要写一个经我加工过的神级分析:给羽泉投票时,喜欢“羽”有一票,喜欢“泉”有一票,喜欢邓超有一票,喜欢孙俪有一票,喜欢白百何有一票,支持3G天翼有一票,家里正在用立白洗衣液的有一票。因此羽泉的得票不第一,实在是天理难容了。何况立白和天翼还是本节目赞助商。
扯淡扯上程序员也一样:当我们猛然出道时发现Java高手前辈实在太多了,赤膊追赶也难以追上,毕竟人家的开发经验放在那;再发现c#,这厮版本和功能升级的也太快了,裸体跟着学也难以全部掌握成为牛人;再看看python或者ruby,学得好的人绝对是大牛而且是少数,学的不好的人基本上就是shit;因此我们不如学php,因为喜欢淘宝的有一票、喜欢mysql的有一票、喜欢apache的有一票、喜欢wordpress的有一票、喜欢dz论坛的有一票、喜欢centos的有一票,不多说了,羽泉是歌王,我们何不想办法成为程序员之王呢。
正文:魔力函数
为何叫魔力函数,或有的地方叫做魔幻函数。原因很简单,没有哪个语言能让你这么简单的把它从头到尾、从里到外如此方便和简单的完爆一遍。爆完之后,会让你有种把php 完完全全征服的感觉。这种感觉在java中是很难找到的,c#呢?oh,谈都不用谈吧。(一)、 __construct 构造函数
构造函数的意思代表,它是第一个被爆的函数,不管你想不想爆,反正它会自动爆。
1234567891011121314 | class test { function __construct() { echo '自爆第一次'; } function mydo() { echo '手动爆一次'; } } $newObj = new test(); $newObj->mydo(); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | classtest { function__construct() { $getargs=func_get_args(); if(count($getargs)<2) exit("参数必须有二个"); } functionmydo() { echo"手动爆一次"; } } $newObj=newtest("aaa");//构造函数中$getargs[0] 的值就是aaa $newObj->mydo(); |
这个构造函数的用法大部分被用在类继承上,也可以直接用在页面输出内容上,根据参数的个数来加载不同的内容。
(二)、__destruct() 析构函数
析构函数原则上的解释是:当删除一个对象或对象操作终止的时候,自动的调用该方法,所以可进行释放资源之类的操作。
实际上咱不要想太多,用了php,根本不需关注此函数。资源释放一切由zend负责,而且php也不适合在类里面做大数据量超级循环的事情,否则那真是自爆了。一般实际项目中,会通过继承的方式做一些日志的记录等小小的事情。如果有百万级数据要在你的类处理,要么说明你接到大项目你要发了,要么就是咱在做梦。
(三)、__autoload 自动加载
这个函数只有一个地方用得着。就是 自动加载函数文件。
123456789101112131415161718192021222324 | class 水果 { function __construct($用户的选择) { if($用户的选择==1) $苹果的对象=new 苹果(); //这里会自动加载一个 啃苹果需要的函数.php else $榴莲=new 榴莲(); //这里就不会加载 多余的php文件 } } class 榴莲 { //太臭,但是我爱吃 } class 苹果 { //不臭,但是我不爱吃 function __autoload() { require("啃苹果需要的函数.php"); } } $newObj = new 水果(1); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | classdata { function__call($name,$arguments) { //$name代表方法名 $arguments代表参数 if($name=="getSqlServer") { // 执行sqlserver相关的sql语句 } else { //执行mysql相关的sql语句 } } } $newObj=newdata(); $newObj->getSqlServer("select top 10 * from table1"); $newObj->getMysql("select * from table1 limit 0,10");//注意mysql是没有 top n的语法的 |
(五)、__get 、__set
当属性未定义时,get或者set时,会自动调用
12345678910111213141516 | class data { function __get($name) //$name 代表属性名 { if($name=="H7N9") //变量为H7N9没有定义它,则调用__get,定义了,则不会进入 return "禽流感"; else return "不要扯淡"; } }$newObj = new data();echo $newObj->H7N9;echo $newObj->H100N30; |
1 2 3 4 5 6 7 8 9 10 11 12 | classdata { var$myname="shenyisyn"; function__clone() { $this->myname="假的shenyisyn"; } } $newObj=newdata(); echo$newObj->myname; $obj2=clone$newObj; echo$obj2->myname; |
12345678910 | class news { var $newsid=1; function __clone() { //在数据库中执行 ID为1的新闻,让其被引用或者采集字段加+1 } }$newObj = new news();$news2=clone $newObj;//终于有外站用户来采集我站新闻了,我好欢喜 |
1 2 3 4 5 6 7 8 9 10 | classnews { var$newstitle="美国国务卿克里抵京访华"; function__toString() //不加这个函数,则会出现 对象无法按字符串输出 { return"这是一个新闻对象,我只能给你一个标题"; } } $newObj=newnews(); echo$newObj;//额。。手误了,忘记这货不是一个字符串,不过照样可以爆出来 |
这个函数只在类被序列化或者反序列化时自动调用。看
1234567891011121314151617 | class news { var $user1="卞工"; var $user2="猪刚烈"; var $user3="学姐"; function __sleep() { echo "学姐是保密的,不会让你序列化"; return array("user1","user2");//user1和user2 必须和上面定义的变量名是一致的。 } }$newObj = new news(); $obj=serialize($newObj); var_dump($obj); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | classnews { var$newsfield=array();//$newsfield代表数据库字段集合 function_get($name) { if(array_key_exists($name,$this->$newsfield)) return$this->$newsfield[$name]; else return""; } function_set($name,$value) { $this->newsfield[$name]=$value; } } |
在设计实际业务类的基类时,用魔幻函数更有有用。
转自:程序员在囧途
http://www.shenyisyn.org/2013/04/13/php100_4.htm
相关文章推荐
- [开心学php100天]第四天:完爆php魔力函数
- [开心学php100天]第四天:完爆php魔力函数
- [开心学php100天]第四天:完爆php魔力函数
- [转][开心学php100天]第四天:完爆php魔力函数
- [开心学php100天]第六天:用php玩转页面(基础篇)
- 开心学PHP100天(七)]精讲PHP构造函数:父亲和儿子的恩恩怨怨
- [开心学PHP100天(七)]精讲PHP构造函数:父亲和儿子的恩恩怨怨
- [开心学php100天]第五天:与基本功搞一搞基(上)
- [开心学php100天]第五天:与基本功搞一搞基(上)
- [转][开心学php100天]第三天:不羁的PHP文件操作
- [转][开心学php100天]第二天:疯狂的数组
- [开心学php100天]第六天:用php玩转页面(基础篇)
- [开心学php100天]第二天:疯狂的数组
- [开心学php100天]第三天:不羁的PHP文件操作
- [开心学php100天]第二天:疯狂的数组
- [置顶] [开心学php100天]第三天:不羁的PHP文件操作
- [开心学php100天]第三天:不羁的PHP文件操作
- [开心学php100天]第一天:另眼看php,基本语法篇
- [开心学php100天]第二天:疯狂的数组
- [开心学php100天]第三天:不羁的PHP文件操作