[开心学php100天]第四天:完爆php魔力函数
本期格言:
当我们天资不够强大时,与其花500%的精力做一个单线程技术高手,不如花较少的精力做一个聪明的多线程程序员。
本期扯淡:
湖南卫视的“我是歌手”第一季终结,歌王产生。也许很多人心目中的歌王都不一样,但是不可否认的是,羽泉确确实实得到了“官方”宣布和“大家都认可”的歌王,我个人分析原因如下:
其实各个歌手实力都很强,各有特色,真没有歌王不歌王之分。如获得神给予天赋的林志炫、高音黄妈、全身都在摇滚的周晓鸥、细腻无比的杨宗纬以及其他各有特色的歌手。但是我个人认为只有羽泉是最聪明的歌手,论音色也许比不过林志炫、论感人也许比不过杨宗纬、论高音高不过妈、论摇滚得剃光头,所以羽泉采取的策略是把自己融入观众,而不是易做图观众融入他们的歌。最终在制胜局拿出最猛的杀手锏。
这里还要写一个经我加工过的神级分析:给羽泉投票时,喜欢“羽”有一票,喜欢“泉”有一票,喜欢邓超有一票,喜欢孙俪有一票,喜欢白百何有一票,支持3G天翼有一票,家里正在用立白洗衣液的有一票。因此羽泉的得票不第一,实在是天理难容了。何况立白和天翼还是本节目赞助商。
扯淡扯上程序员也一样:当我们猛然出道时发现Java高手前辈实在太多了,赤膊追赶也难以追上,毕竟人家的开发经验放在那;再发现c#,这厮版本和功能升级的也太快了,裸体跟着学也难以全部掌握成为牛人;再看看python或者ruby,学得好的人绝对是大牛而且是少数,学的不好的人基本上就是易做图;因此我们不如学php,因为喜欢淘宝的有一票、喜欢mysql的有一票、喜欢apache的有一票、喜欢wordpress的有一票、喜欢dz论坛的有一票、喜欢centos的有一票,不多说了,羽泉是歌王,我们何不想办法成为程序员之王呢。
正文:魔力函数
为何叫魔力函数,或有的地方叫做魔幻函数。原因很简单,没有哪个语言能让你这么简单的把它从头到尾、从里到外如此方便和简单的完爆一遍。爆完之后,会让你有种把php 完完全全征服的感觉。这种感觉在java中是很难找到的,c#呢?oh,谈都不用谈吧。
(一)、 __construct 构造函数
构造函数的意思代表,它是第一个被爆的函数,不管你想不想爆,反正它会自动爆。
[php]
class test
{
function __construct()
{
echo '自爆第一次';
}
function mydo()
{
echo '手动爆一次';
}
}
$newObj = new test();
$newObj->mydo();
运行结果,是自爆第一次(不管你想不想),然后才会爆第二次。
这里有个知识点是:传参数也很简单,你可以__construct($arg1,$arg2);
同理也可以用 func_get_args这个函数来得到未知个数的参数。譬如
[php]
class test
{
function __construct()
{
$getargs=func_get_args();
if(count($getargs)<2)
exit("参数必须有二个");
}
function mydo()
{
echo "手动爆一次";
}
}
$newObj = new test("aaa"); //构造函数中$getargs[0] 的值就是aaa
$newObj->mydo();
注意,用了exit,则mydo方法则不会运行,也就是你想手动爆是不可能的了。类似于c#的response.end。
这个构造函数的用法大部分被用在类继承上,也可以直接用在页面输出内容上,根据参数的个数来加载不同的内容。
(二)、__destruct() 析构函数
析构函数原则上的解释是:当删除一个对象或对象操作终止的时候,自动的调用该方法,所以可进行释放资源之类的操作。
实际上咱不要想太多,用了php,根本不需关注此函数。资源释放一切由zend负责,而且php也不适合在类里面做大数据量超级循环的事情,否则那真是自爆了。一般实际项目中,会通过继承的方式做一些日志的记录等小小的事情。如果有百万级数据要在你的类处理,要么说明你接到大项目你要发了,要么就是咱在做梦。
(三)、__autoload 自动加载
这个函数只有一个地方用得着。就是 自动加载函数文件。
[php]
class 水果
{
function __construct($用户的选择)
{
if($用户的选择==1)
$苹果的对象=new 苹果(); //这里会自动加载一个 啃苹果需要的函数.php
else
$榴莲=new 榴莲(); //这里就不会加载 多余的php文件
}
}
class 榴莲
{
//太臭,但是我爱吃
}
class 苹果
{
//不臭,但是我不爱吃
function __autoload()
{
require("啃苹果需要的函数.php");
}
}
$newObj = new 水果(1);
上述列子请勿直接拷贝运行,搞成中文是为了更容易看懂。
(四)、__call
调用不存在的类的函数的时候得处理方法,__call 失败,就调用父类方法,依此类推。
这个函数个人认为是php最给力的函数。由此可以写出很亮的代码 譬如:
[php]
class data
{
function __call($name,$arguments)
{
//$name代表方法名 $arguments代表参数
if($name=="getSqlServer")
{