实际上开拓者除了把自己当成php程序员,更该当关注php以外的东西,将自己定位于能闇练利用php搭建系统的工程师。
我认为高等php工程师可以往几个方向去发展:
1.深度方向

一个工程师要往高阶发展,必须同时强化几个技能能力:
·
设计能力:懂得如何利用分层、面向工具、设计模式等设计组织代码
·
·
编码能力:熟习php语法特性,知道怎么用一两行代码代替低级开拓者十几上百行代码。
·
·
工程能力:学会如何快速构建工程,学会如何构建可读、可扩展性的工程,学会如何避免埋坑给后人,学会如何与人协作掩护工程,学会如何担保工程质量,学会如何权衡利弊,学会如何在困难面前妥协。
·
·
抽象能力:低级开拓者常日会等到逻辑重复时再抽象封装(乃至怕拖进度或者
·
·
架构能力:一个业务系统如何划分模块,模块之间如何协作通信,每个模块的技能选型如何做,系统细节如何规避问题等等。
·
·
优化能力:学会如何评估、剖析、提升系统性能。优化路子很多,产品功能优化、业务逻辑优化、根本技能优化、操作系统底层硬件的优化等等。
·
下面说一下实操:
php如何进行多进程编程
一、在php中利用pcntl_fork扩展函数进行frok多个进程。
pcntl_fork返回值解释
当pcntl_fork函数被调用时,它将返回3个值。
如果返回值为-1,则fork失落败,并且没有子进程。 这可能是由于短缺内存,或者由于已经达到对用户进程数量的系统限定。
如果返回值是大于0的任何数字,当前脚本是调用pcntl_fork()的父级,返回值是分叉的子进程的进程ID(PID)。 末了,如果返回值为0,则当前脚本是被分叉的子节点。
pcntl_fork实行事理
如果你成功的实行pcntl_fork()函数,将有两个PHP副本同时实行相同的脚本。 它们都从pcntl_fork()行连续实行,最主要的是,子进程获取父进程中设置的所有变量的副本,乃至是资源。 我们忘却的一个关键的事情是,资源的副本不是一个独立的资源,他们将指向同一个事情,这可能是有问题的,更多的详情,稍后将连续谈论。
现在,这里有一个基本利用pcntl_fork()的例子:
<?php
$pid = pcntl_fork(); switch($pid) { case -1: print\"大众Could not fork!\n\公众; exit; case 0: print\"大众In child!\n\"大众; break; default: print\"大众In parent!\n\"大众;
}?>
上面的脚本只是在父进程和子进程中打印一条。 但是,它不显示父项的变量数据如何被复制到子项,它输出了2条信息,如下所示,解释已经是有2个进程在实行了(个中一个是主进程,一个是fork出来的子进程)
[root@25f0b49dc696 wwwroot]# php fork.php In parent!In child!
接着看下面的例子:
<?php
$pid1 = pcntl_fork(); //第一次fork
$pid2 = pcntl_fork(); //第二次fork
$pid3 = pcntl_fork(); //第三次fork
$current_process_id = posix_getpid();
echo \"大众current_process_id===$current_process_id===pid1==$pid1===pid2===$pid2==pid3==$pid3\n\"大众;
上面的例子,输出结果如下:
current_process_id===13090===pid1==13091===pid2===13092==pid3==13093current_process_id===13093===pid1==13091===pid2===13092==pid3==0current_process_id===13092===pid1==13091===pid2===0==pid3==13094current_process_id===13094===pid1==13091===pid2===0==pid3==0current_process_id===13091===pid1==0===pid2===13095==pid3==13096current_process_id===13096===pid1==0===pid2===13095==pid3==0current_process_id===13095===pid1==0===pid2===0==pid3==13097current_process_id===13097===pid1==0===pid2===0==pid3==0
剖析上面的结果,
可以看出,主进程ID是13090
第一次fork
主13090 ->13091
第二次fork
主13090 ->13092
子13091 ->13095
第三次fork
主13090 ->13093
子13091 ->13096
子13092 ->13094
子13095 ->13097
至此,一共有8个进程在实行当前脚本
二、利用PHP DOMDocument创建动态XML文件
当处理基于XML运用程序时,开拓者常常须要建立XML编码数据构造。例如,Web中基于用户输入的XML状态模板,做事器要求XML语句,以及基于运行韶光参数的客户相应。
只管XML数据构造的构建比较费时,但如果利用成熟的PHP DOM运用程序接口,统统都会变得大略明了。本文将向你先容PHP DOM运用程序接口的紧张功能,演示如何天生一个精确的XML完全文件并将其保存到磁盘中。
创建文档类型声明
一样平常而言,XML声明放在文档顶部。在PHP中声明十分大略:只需实例化一个DOM文档类的工具并授予它一个版本号。查见地式清单A:
程序清单 A
123456789<?php // create doctype $dom= newDOMDocument(\"大众1.0\公众); // display document in browser as plain text // for readability purposes header(\"大众Content-Type: text/plain\"大众); // save and display tree echo$dom->saveXML(); ?>请把稳DOM文档工具的saveXML()方法。稍后我再详细先容这一方法,现在你只须要大略认识到它用于输出XML文档确当前快照到一个文件或浏览器。在本例,为增强可读性,我已经将ASCII码文本直接输出至浏览器。在实际运用中,可将以text/XML头文件发送到浏览器。
如在浏览器中查看输出,你可看到如下代码:
<?xml version=\"大众1.0\"大众?>
添加元素和文本节点
XML真正强大的功能是来自其元素与封装的内容。幸运的是,一旦你初始化DOM文档,很多操作变得很大略。此过程包含如下两步骤:
对想添加的每一元素或文本节点,通过元素名或文本内容调用DOM文档工具的createElement()或createTextNode()方法。这将创建对应于元素或文本节点的新工具。
通过调用节点的appendChild()方法,并把其通报给上一步中创建的工具,并在XML文档树中将元素或文本节点添加到父节点。
限于篇幅,关于PHP更多的干货,由广州中星的老师连续为大家讲解,敬请期待!