查查知识网

广州PHP培训教师(php合作培训)

发布者:丁俊
导读很多工作几年的php开发者都会有这样的迷茫,php开发多了,无外乎“增删改查调接口”,真的是这样吗?实际上开发者除了把自己当成php程序员,更应该关注php以外的东西,将自己定位于能熟练使用php搭建

很多工作几年的php开发者都会有这样的迷茫,php开发多了,无外乎“增删改查调接口”,真的是这样吗?

实际上开发者除了把自己当成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()的例子:

$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!

接着看下面的例子:

$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==$pid3n";

上面的例子,输出结果如下:

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

123456789newDOMdocument("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真正强大的功能是来自其元素与封装的内容。幸运的是,一旦你初始化DOM文档,很多操作变得很简单。此过程包含如下两步骤:

对想添加的每一元素或文本节点,通过元素名或文本内容调用DOM文档对象的createElement()或createTextNode()方法。这将创建对应于元素或文本节点的新对象。

通过调用节点的appendChild()方法,并把其传递给上一步中创建的对象,并在XML文档树中将元素或文本节点添加到父节点。

限于篇幅,关于PHP更多的干货,由广州中星的老师继续为大家讲解,敬请期待!