转自:http://blog.youkuaiyun.com/phphot/article/details/3940745
现在的IT市场很浮躁,充斥着各种各样的所谓“精通”,在求职简历上比比皆是。但是本文目的不在于讨论精通的标准,也不想去批评现在漫天的精通。就 让我们暂且认同“精通”这两个字,来讨论下Linux/Unix(以下简称Linux)和C对精通PHP的帮助。另外要说明下的是,这里说的精通PHP只 是纯粹对于PHP来说的,并不是指web开发,所以javascript,HTML或者Ajax,smarty,CSS这类都不在讨论范围。
首 先无论从哪个方面看,PHP和Linux都是最好的组合。虽然PHP也能在windows上运行,但是有些功能却实现不了。举个例子就是进程控制的功能 PCNTL,其中有一个函数是pcntl_fork(),如果这个函数运行成功的话,会产生一个子进程。这个对于想在后台产生多个进程来执行多个任务的应 用来说非常有用,但是这个函数库在windows下是不可用的,当然一些第三方软件可以解决windows下的问题,比如pstools,但这本身已经是 PHP之外的东西了。如果你再研究一下在Linux下相同功能的C程序怎么写后,你会发现PHP其实就是Linux下C程序的翻版,不同的只是函数名称而 已。下面是PHP的pcntl_fork()函数和C中的相应fork()函数的比较。
FILE *fopen(const char *pathname, const char *type) ;
FILE *fopen(const char *pathname, const char *type) ;
其中的type参数又和PHP中的fopen()的mode参数一模一样。如果你知道C中的fopen()函数,那PHP的相关函数你等于无师自通了。
最 后再举个信号的例子。信号是系统中很重要的一个机制,是异步事件的经典实例。这个功能在平时使用PHP时很少用到,即使用到了也就是简单的使用 pcntl_signal(),pcntl_alarm()一下就算完了,有几个人会去研究这些函数背后的原理呢。事实上光信号的种类就有数十种,当然我 们不必每个都熟知,但是知道个大概对编程人员是非常有好处的,而只知道如何使用却不知道原理是现今极大一部分程序员的通病。如果你有空钻研下Linux信 号这部分的知识,你就会有拨开云雾拨云见日的感觉。下面再贴两段PHP和C中对信号使用的代码片段。
// signal handler function
function sig_handler($signo)
{
switch ($signo) {
case SIGTERM:
// handle shutdown tasks
exit;
break;
case SIGHUP:
// handle restart tasks
break;
case SIGUSR1:
echo "Caught SIGUSR1.../n";
break;
default:
// handle all other signals
}
}
echo "Installing signal handler.../n";
// setup signal handlers
pcntl_signal(SIGTERM, "sig_handler");
pcntl_signal(SIGHUP, "sig_handler");
pcntl_signal(SIGUSR1, "sig_handler");
static void sig_usr(int);
int main(void) {
if(signal(SIGUSR1, sig_user) == SIG_ERR)
err_sys("can't catch SIGUSR1");
if(signal(SIGUSR2, sig_user) == SIG_ERR)
err_sys("can't catch SIGUSR2");
for ( ; ; )
pause();
}
static void sig_usr(int signo) {
if(signo == SIGUSR1)
printf("received SIGUSR1/n");
else if(signo == SIGUSR2)
printf("received SIGUSR2/n");
else
err_dump("received signal %d/n", signo);
}
不难看出,又和前面的一些例子一样,PHP和C对信号的处理程序几乎是相同的。还是那句话,学好C,PHP就能很容易的无师自通了。并且熟练的使用C还可以自己编写PHP扩展,使PHP的应用范围更广,效率更高。
其他的例如文件系统,标准输入输出,时间日期处理等等,我就不一一举例子了。可以毫无悬念的说,学好Linux和C就是学好PHP的基础。
也 许有些朋友会说,我Linux一窍不通,C也只是大学里学过,我平时工作也只需要读读数据库,取点数据做点处理再存回数据库,更有些朋友可能就是在 Windows平台下使用PHP在工作,那就更没Linux的经验了,还不是一样干了这么久了,少则几个月,多则几年,仍然挺好的。
关于 这个,我上文也说到了,现在只知道如何使用却不知道原理的程序员实在是太多了。这样只能始终在编程的最外围游走,终日受累于各种工具和框架,这个现象并不 限于PHP,在Java,C#等编程语言里也同样存在。大量的工具和框架使程序员们不再专注于内在的原理,而是简单的包含和调用,一样也能完成工作。或许 你认为这样也不错,那当然没问题。但是人各有志,相信还是有不少程序员是对程序背后的原理相当感兴趣的。其实并不只是兴趣这一个理由去研究原理,相反只有 了解了原理,才能更好的认识程序,知道程序为什么要这么写,深入浅出,写出更优秀的程序。想想看,当别人还在讨论表面问题时,你已经从操作系统的内核出发 想出了最好的解决方法并且用坚实的理论依据说服同事们按照你的想法做的时候,你就已经是真正的高手了。
想要精通PHP吗?先学好Linux/Unix和C吧。
引用请注明出处http://blog.youkuaiyun.com/mynamesucks/archive/2009/02/26/3939449.aspx
mynamesucks的技术blog