php php

php学习之php的八种数据类型的使用

字符串类型:string

php学习之php的八种数据类型之字符串string的使用

1.整数型:int

说明:是负数、0、正数的集合、在php中存储整数为10进制、八进制、十六进制

语法:$var=整数数字;

八进制的写法:在数字前面加上0,就是八进制。数字的范围有0-7。算法:出去开头0,各位+十位*8 +百为*8*8+千位*8*8*8….$num=0456; //4*8*8+5*8+6=302十六进制的写法:在数字前面加上0x,数字为0-f算法:出去开头0,各位+十位*16 +百为*16*16+千位*16*16*16….$num =0x456;//4*16*16+5*16+6=1110 十进制的写法:直接写数字,数字范围0-9

php最大的存储数值为:21亿。用常量PHP_INIT_MAX查询,最大存储值为2147483647,超过这个值自动转为float型

php最大的位数为14位,一个数值占多个位置,PHP_INT_SIZE

2.浮点型:float

说明:就是小数,浮点型也叫浮点数、float、双精度数double或实数real

php中的小说有两种表现形式,

普通的小数科学计数法

浮点数的精度有限,尽管取决于系统,php通常使用ieee754双精度格式,则由于取整而导致的最大相对误差为1.11e-16。非基本数学运算可能会给出更大的误差,并且要考虑到进行复合运算时的误差传递

此外,以十进制能够精确表示的有理数如0.1或0.7,无论有多少为数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式,这就会造成混乱的结果,如:floor((0.1+0.7)*10)通常会返回7而不是预期中的8,因为结果内部的表示其实是类似于7.9999999999999991118…

所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等,如果确实需要更高的精度,应该使用任意精度数学函数或者gmp函数

普通小数形式

小数末尾多个,小数点后面超过最大长度,会自动删除超出部分,最末尾会四舍五入

科学计数形式

超过14位自动转为科学计数法

3.布尔类型:boolean

说明:在php中布尔型的数据只有两个值,true和false

布尔值一般都用于返回的结果用于流程控制语句中

4.数组:array

说明:一组数据的集合

$变量=array(元素1,元素2,元素3,……);

5.对象:object

说明:世间万物皆为对象

在php中的对象是由类创建来的

//class创建一个类,调用对象$name=null;$age=0;Class people{//属性var $name;var $age;//方法function run(){echo '跑步';}}//创建对象$zs=new people();$zs->name='张三';$zs->age=23;echo $zs->name;$zs->run();$ls= new people();

6.空:null

说明特殊的null值表示一个变量没有值,null类型唯一的值就是它本身null

在php中只能有定义变量并赋值的情况,没有只定义不赋值,这个时候就需要创建一个变量,不知道存储说明值,这个时候可以使用null来创建变量

用法:

7资源:resource

说明:就是引用php外部的内容,这个时候的类型就是资源,资源是通过专门的函数建立和使用的

8.手册中的类型:用于说明需要某种类型的数据

mixed:一个参数可以接收多种不同的类型,如果函数需要的形参是两种以上,都会使用mixednumber:可以是int和floatvoid:作为返回类型意味着函数的返回值是无用的,void作为参数列表意味着函数不接受任何参数

9数据类型的转换

说明:在php 中数据类型是可以进行互相转换的,如整型1转换成字符串’1′

在php中分两种转换形式,:自动转换和强制转换

自动转换

给到特定写法就会改变原来的类型

强制转换

可以使用一些特殊的方式来强制型的改变类型

允许的强制转换的有:

(int),(integer):转换为整型(bool),(boolean):转化为布尔类型(float),(double),(real):转换为浮点型(string):转换为字符串(array):转换为数组(object):转换为对象(unset):转换为null

<?php/*** @Author: admin* @Date: 2018-08-16 22:38:26* @Last Modified by: admin* @Last Modified time: 2018-08-17 04:29:11*/////定义一个十进制的整数的类型$num1 = 10;$num2 = 0;$num3 = -10;echo $num1."<br>".$num2."<br>".$num3;echo "<br>";//定义一个八进制的类型$num1 = 000;//0$num2 = 077774;//32764$num3 = 05555;//2925echo $num1."<br>".$num2."<br>".$num3;echo "<br>";//定义一个十六进制的类型$num1 = 0x00ff;//255$num2 = 0xfff;//4095$num3 = 0x00000;//0echo $num1."<br>".$num2."<br>".$num3;echo "<br>";//查询最大php存储数值echo PHP_INT_MAX;//最大存储值为2147483647,超过这个值自动转为float型//查询一个数字占多大位置$num = 1111111111111111;//超过14位后自动转为科学计数法var_dump($num);echo PHP_INT_SIZE;//4$num = 11111111111;//超过int的取值范围后自动转为float型var_dump($num);$num = 1111111111;//没超过int的取值范围是int型var_dump($num);//小数浮点型$num1=1.1;$num2=0.0;//小数末尾多个,小数点后面超过最大长度,会自动删除超出部分,最末尾会四舍五入$num3=1.00000000000000000000000000;var_dump($num3);$num3=9.99999999999999999999999999;var_dump($num3);$num3=5.55555555555555555555555555;var_dump($num3);$num3=4.44444444444444444444444444;var_dump($num3);//科学计数$num=1111111111111111.1;//超过14位自动转为科学计数法var_dump($num);$num=1111111111111.1;//没超过14位var_dump($num);//不精准体现$num=floor((0.1+0.7)*10);//floor强制转化成浮点型var_dump($num);//结果为7二不是8//bool类型$true=true;var_dump($true);//一般布尔类型会用在控制语句中if ($num==1) {echo '真';} else {echo '假';}echo "<hr>";//class创建一个类,调用对象$name=null;$age=0;Class people{//属性var $name;var $age;//方法function run(){echo '跑步';}}//创建对象$zs=new people();$zs->name='张三';$zs->age=23;echo $zs->name;$zs->run();//null类型$a=null;$b='';//空字符串if (empty($b)) {echo '空';} else {echo $b;}//给函数的形参加默认值function FunctionName($value='',$b=null){}FunctionName();//资源resource 连接数据库$link= @mysql_connect('127.0.0.1','root','root');var_dump($link);//自动转换$a=1;$b=2;$v=$a.$b;//转换为字符串var_dump($v);if ($a) {//自动转换为boolean类型echo '真';}//强制转换$num=1;var_dump((string)$num);//强制转换为字符串$str='123';var_dump((int)$str);//强制转换为整数

展开
收起

一朝入得PHP,从此代码陪一生

头次写关于小编自己的职业生涯文章,心里有那么一点点忐忑,为什么忐忑呢,因为小编入PHP这一行满打满算一年半左右,从小白到现在自己可以开发一些小项目,期间的各种滋味只有自己可以体会!闲话少说,书归正传!

小编以前是一位机械制造类的学生,何为机械制造,说白了就是关于机械这一块的材料挑选和制造,这就是我理解的机械制造。接触互联网这一块也是个偶然机会!

因为自己在学习的生涯中迷上了电脑,刚开始玩的电脑是那种大脑袋类,不像现在液晶显示器满地都是,包括我现在用的电脑也是液晶显示屏!为玩电脑没少吃老爸砂锅大的拳头以及皮鞋,想想都是一把辛酸泪飘过!

老式电脑

这个机会是在2017年学生的暑假期间,我以前一个村里的发小在谈起他的工作的时候给我说:"你既然这么喜欢玩电脑,何不去学习计算机语言呢?"我当时的感觉就是计算机还有语言?当时让他详细说了一下,我才了解计算机上的一些功能都是通过代码去做的功能,也就是C语言,网页也是用其他语言完成。

我听完以后顿时感觉有一扇我喜欢的门要降临在我身边了!

然后我就开始问度娘,什么是计算机语言,目前最火热的计算机语言是哪个,各种搜呀,然后发现了我现在用的语言,也就是曾经流传的一句话"PHP是世界上最好的语言"!

从此开始自己的PHP的学习生涯!

PHP是世界上最好的语言

学习PHP首先得知道什么叫PHP,PHP都能干什么?通过百科找到了我想要的答案,借用百科上的一段话"PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。"

看完以后然后找各种资料,开始自学,然而想象是美好的,现实是残酷,没有一点计算机基础,小编学的时候开始各种懵,什么叫HTML?什么叫语法?很不幸,小编当时真的是什么都不知道,只好在线求助一些大神,大神提供的建议是"像你这样没有一点基础学习PHP,入门还是比较难的,你可以找一个培训机构进行培训,培训机构主要是让你入门,剩下的只有靠你自己!"然后我挑选了一个北京的培训机构,名字就不提了,免得各位看官说小编做宣传广告!

在培训机构里学习的线路是HTML->CSS->PHP->MySQL->JavaScript->thinkPHP和laravel->其他!就这花了我将近三万块大洋!

然后开始自己找工作,在工作中学习!

呀……老板来查岗了!未完待续……

展开
收起

php学习之php的预定义常量的使用

说明:常量一旦定义,里面的值和常量是不能改变和销毁的,而且常量名不能重复

1.常量的定义:

语法:define(常量名,常量值);不能定义复合数据

5.xphp版本:const来定义复合的数据,如数组7.0 php版本:define可以定义复合的数据.如:define(ARR,[1,2,3,4,5]);

2访问常量

说明:直接使用常量名就可以了.。如:echo NAME;

常量的使用:网站的配置文件中使用。如:当前网站路径

3.魔术常量—预定义常量

__LINE__:文件中的当前行号__FILE__:文件的完整路径和文件名,如果用在被包含的文件中,则返回被办好的文件名,自php4.0.2起,__FILE__总是包含一个绝对路径.如果是符号连接,则是解析后的绝对路径,而在此前的版本有时会包含一个相对路径__DIR__:文件所在目录。如果用在被包括文件中,则返回被包括的文件所在目录,它等价于dimame(__FILE__)除非是i根目录。赋值目录中名不包括末尾斜杠__FUNCTION__:函数名称,php4.3.0新增,php5起本常量返回该函数被定义时的名字(区分大小写)在php4中该值总是小写__CLASS__:类的名称__TRAIT__:trait的名称__METHOD__:类的方法名__NAMESPACE__:当前命名空间的名称mvc:URL传递数据:index.php:c=getuser&a=xxxx&m=index

产生随机数的函数:rand()

说明:rand:产生一个随机整数

intrand(void)

int rand(int $min, int $max)

<?php/*** @Author: admin* @Date: 2018-08-12 22:56:43* @Last Modified by: admin* @Last Modified time: 2018-08-12 23:39:54*///常量的定义define('NAME','张三');define('PI',3.14);echo NAME,PI;const USER='admin';echo USER;//__CLASS__:获取当前类名class getuser{function index(){include './xx/index.html';}function add(){include './xxx/index.html';}}//rand()随机函数$num=rand(1,100);//随机生成1-100的整数echo $num;

题:

变量处理常用的函数有哪些? 举例说出至少四个,并各举一个案例说明unset如何在函数内部就销毁一个全局变量,请使用的代码来说明如何销毁PHP基本数据类型的值传递和引用传递的区别是什么,请画出对应的内存示意图一个页面server.php,并输出至少5个$_SERVER内的元素信息,并说明是什么含义,页面表现形式如下:元素名称 使用形式 结果 含义

PHP_SELF $_SERVER[‘PHP_SELF’] /test/$_SERVER.php 表示本网页路径

参考:PHP手册〉语言参考〉预定义变量〉$_SERVER

5.写一个表单,用来填写“用户信息”,要求出现所有的表单元素类型(除文件类型):

文本框,密码框,单选,复选,下拉,多行文本域,隐藏域

提交后显示用户所填写的所有数据。复选框的问题:都一个name值,复选框name是一个,问:怎么实现获取多个选项的值

答案:

1.变量常用的函数:

isset():案例:$user=isset($_GET[‘user’])?$_GET[‘user’]:”;//判断是否存在

unset():案例:$a=1; unset($a);//销毁变量a

empty():案例:$a=1;if(empty($a)){echo “存在”};//判断是否为空

echo:案例:$a=1;echo $a;//打印a

var_dump():案例:$a=1; var_dump($a);//打印a

2.用unset销毁在函数中的全局变量

//只销毁局部变量$a=1;function demo(){global $a;//把全局变量局部声明echo $a;unset($a);//销毁变量aecho $a;}demo();//变量a被销毁echo $a;//a的值存在正常打印//销毁全局变量function un(){global $a;//声明局部变量 unset($GLOBALS['a']); //echo $a;}un();echo $a;//a的值没有了

3.值传递和引用传递的区别

值传递,传递过去的是数值,

引用传递,传递的是地址值

4.新建一个server.php

<?php/*** @Author: admin* @Date: 2018-08-13 00:03:26* @Last Modified by: admin* @Last Modified time: 2018-08-13 01:13:03*/$arrayName = array('REQUEST_URI','SCRIPT_NAME','PHP_SELF','SERVER_ADMIN','SCRIPT_FILENAME');$arr2=array('URI 用来指定要访问的页面','包含当前脚本的路径','当前执行脚本的文件名',' Apache 服务器配置','当前执行脚本的绝对路径');echo "<table border=1>";echo '<tr>';echo '<th>元素名称</th><th>使用形式</th><th>结果</th><th>含义</th>';echo '</tr>';foreach ($arrayName as $key => $value) {echo '<tr>';echo '<td>'.$value.'</td>';echo "<td>\$_SERVER['$value']</td>";echo "<td>".$_SERVER[$value]."</td>";echo '<td>'.$arr2[$key].'</td>';echo '</tr>';}echo '</table>';

5.答案

展开
收起

浅谈Java和PHP的主要区别

当谈到PHP与Java的差异性问题时,更多的是回答初学者的一些疑问。对于刚接触IT的同学来说,他们需要做好对未来职业的选择。所以是选择PHP还是选择Java更有利于自身的技术特点和发展前景。所以在解决这一问之前,首先要认识Java和PHP两种语言。

认识Java

Java是一门计算机编程语言,和C++、Python等编程语言一样,Java如今依旧应用广泛。从我们日常用的安卓手机APP到大部分网站或管理信息系统的应用服务器程序都是用Java这中语言来写的。它之所以应用广泛,笔者认为与Java能顺应面向对象这一主流的编程思想有很大的关系,将数据结构及其处理方法集成起来可以减少代码量,让程序员更多地把精力放在对程序的设计上,增加程序的功能性;同时减少了C类语言中指针、多继承等概念,引入了多线程、分布式与嵌入式概念,并且配合虚拟机的使用,让Java成为最佳的跨平台语言。

认识PHP

PHP是Hypertext Preprocessor的缩写,是一种计算机脚本语言(Script languages)。脚本语言不需要像编程语言那样在编译时生成二进制可执行文件,而是直接对写好的PHP代码执行以达到效果。和同样的脚本语言JavaScript一样,PHP也是一种解释型语言,即可直接解释执行。与其说PHP是编程语言,不如说是一组命令。我们之所以用PHP和Java做比较是因为它也是面向对象的,同时也用到编程语言当中的一些变量,但他并没有像编程语言那样严格。正因为他是一组命令,可嵌入到Html中,实现网页特效,于是PHP被广泛应用到Web当中。

在充分认识这两种语言之后,笔者从系统技术架构方面和互联网应用前景两方面进行比较。

系统技术架构

分层思想是是设计计算机系统过程中非常重要的思想。比如操作系统常见的硬件层、驱动层、应用层之间的关系。分层可以更好地实现高内聚、低耦合的效果。我们都知道,Java语言有着完备的MVC框架,包括视图层、业务控制层和持久层,在Spring框架中,我们可以通过IOC和AOP降低编码过程中的高耦合,也就是说Java中的这些框架可以让开发者有更广阔的空间去设计科学合理的架构,也体现着Java多层架构的特点。相比Java而言,PHP留给开发者的空间并不多,但PHP近些年也在改进,迎合电子商务的需要,引入MVC设计模式,但成熟性和稳定性上与Java还是有着不小的差距。不得不提的是PHP可兼容MySQL开发,这使得在考虑成本因素的前提下,PHP变得小而精,收到了一些中小型网站的青睐。

互联网应用前景

Java在积累了大量的开发者和市场之后,已经形成了完整的生态,所以Java进入Web领域是顺理成章的事。虽然Java在开发应用程序方面时常被人们吐槽,但Java在开发网站系统上有着自己独特的优势就是JavaWeb实现了前后端的统一。出于安全性的考虑,大多数企业采用的是Linux服务器,而JavaWeb对Linux有着良好的适配性和可移植性,更有利于方便对网站前后端的管理。同时,Java设计模式较为丰富,还有完善的框架,在多线程、高并发方面有着较好的稳定性。适合做大型的商业项目。当然,我们也要看到,PHP从诞生之日起就是为互联网而生的,虽然没有Java那样完备的生态,但PHP有着小而精,部署成本低的特点。PHP也可以采用分布式系统,同时还提供了较多的数据接口,弥补了自身的不足。在互联网应用方面,怎样选择需要结合具体的项目,考虑成本和效益以及业务需求。

如果从学习角度来考虑,PHP要比Java简单,但如果你Java技术过硬,未来的职业前景也是比较可观的。

展开
收起

PHP7--PHP的一次重大变革

一、写在开头

PHP7是PHP编程语言全新的一个版本,主要在性能方面获得了极大的提升。官方的文档显示,PHP7可以达到PHP5.x版本两倍的性能。同时还对PHP的语法做了梳理,提供了很多其他语言流行的语法格式。难能可贵的是,做了如此大的改动,PHP7的兼容性还是非常好的。对于绝大多数的应用来讲,可以不用做修改即可迁移到PHP7版本。

PHP7你值得拥有

有人有疑问,为什么没有PHP6就直接PHP7了呢,实际上PHP6这个项目有过,只是后来取消了,但大量的功能已经在PHP5.x版本中得以实现。所以这一次直接就是PHP7。

二、PHP7的安装

使用编译安装太麻烦了,这里提供 Linux下的centos的安装php7的方法:

1)安装epel: yum -y install epel-release

2)更换rpm源,请根据自己的centos版本选择相应的rpm源进行安装:

Centos 5.X:

rpm -Uvhhttp://mirror.webtatic.com/yum/el5/latest.rpmCentOs6.x:

rpm -Uvhhttp://mirror.webtatic.com/yum/el6/latest.rpm

CentOs 7.X:

rpm -Uvhhttps://mirror.webtatic.com/yum/el7/epel-release.rpm

rpm -Uvhhttps://mirror.webtatic.com/yum/el7/webtatic-release.rpm

3)删除之前的php版本:

yum remove php * php-common

4)安装php7: yum install php70w

5)安装成功并检测: php -v

三、PHP7的新特性

1) 标量类型声明: PHP 7 中的函数的形参类型声明可以是标量了,即可以使用 string、int、float和 bool。

php7性能提升了2倍

2)NULL 合并运算符:

同时使用三元表达式和 isset()的情况,NULL 合并运算符使得变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数。

<?php// 如果 $_GET['user'] 不存在返回 'nobody',否则返回 $_GET['user'] 的值$username = $_GET['user'] ?? 'nobody';// 类似的三元运算符$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';?>4) 太空船操作符(组合比较符)

3)太空船操作符用于比较两个表达式。当$a大于、等于或小于$b时它分别返回-1、0或1。

// 整型echo 1 <=> 1; // 0echo 1 <=> 2; // -1echo 2 <=> 1; // 1

4)通过 define() 定义常量数组

define('ANIMALS', ['dog', 'cat', 'bird']);echo ANIMALS[1]; // 输出 "cat"?>

四、PHP7的修改

1.【 变量处理机制修改】:

间接变量、属性和方法引用都按照从左到右的顺序进行解释:

$$foo['bar']['baz'] // interpreted as ($$foo)['bar']['baz’]

如果想改变解释的顺序,可以使用大括号:${$foo['bar']['baz’]}

global关键字现在只能引用简单变量

global $$foo->bar; // 这种写法不支持。

global ${$foo->bar}; // 需用大括号来达到效果。

引用赋值时自动创建的数组元素或者对象属性顺序和以前不同了。

$array = [];$array["a"] =& $array["b"];$array["b"] = 1;var_dump($array);

PHP7产生的数组:["a" => 1, "b" => 1]

PHP5产生的数组:["b" => 1, "a" => 1]

2.【list()修改】

list()不再按照相反的顺序赋值

list($array[], $array[], $array[]) = [1, 2, 3];var_dump($array);上面的代码会返回一个数组:$array == [1, 2, 3] 而不是之前的 [3, 2, 1]

注意:只是赋值的顺序发生变化,赋的值还是和原来一样的。

空的list()赋值不再允许。

list() = $a;

list()不在支持字符串拆分功能

$string = "xy";

list($x, $y) = $string;

这段代码最终的结果是:$x == null and $y == null (不会有提示)

PHP5运行的结果是: $x = "x" and $y = "y”.

除此之外,list()现在也适用于数组对象:

list($a, $b) = (object) new ArrayObject([0, 1]);

PHP7结果:$a == 0 and $b == 1.

PHP5结果:$a == null and $b == null.

3.【 foreach 修改】

foreach()循环对数组内部指针不再起作用。

$array = [0, 1, 2];foreach ($array as &$val){var_dump(current($array));}

PHP7运行的结果会打印三次int(0),也就是说数组的内部指针并没有改变。

之前运行的结果会打印int(1), int(2)和bool(false)

按照值进行循环的时候,foreach是对该数组的拷贝操作

foreach按照值进行循环的时候(by-value),foreach是对该数组的一个拷贝进行操作。这样在循环过程中对数组做的修改是不会影响循环行为的。

$array = [0, 1, 2];$ref =& $array; // Necessary to trigger the old behaviorforeach ($array as $val) {var_dump($val); unset($array[1]);}

上面的代码虽然在循环中把数组的第二个元素unset掉,但PHP7还是会把三个元素打印出来:(0 1 2)

之前老版本的PHP会把1跳过,只打印(0 2).

按照引用进行循环的时候,对数组的修改会影响循环。

如果在循环的时候是引用的方式,对数组的修改会影响循环行为。不过PHP7版本优化了很多场景下面位置的维护。比如在循环时往数组中追加元素。

$array = [0];foreach ($array as &$val) {var_dump($val); $array[1] = 1;}

上面的代码中追加的元素也会参与循环,这样PHP7会打印"int(0) int(1)",老版本只会打印"int(0)”。

4.【参数处理机制修改】

重复参数命名不再支持

重复的参数命名不再支持。比如下面的代码执行的时候会报错:

public function foo($a, $b, $unused, $unused) {// ...}func_get_arg和func_get_args()调整

func_get_arg()和func_get_args()这两个方法返回参数当前的值,而不是传入时的值。当前的值有可能会被修改

function foo($x){$x++; var_dump(func_get_arg(0));}foo(1);

上面的代码会打印2, 而不是1。如果想打印原始的值,调用的顺序调整下即可。

同样在打印异常回溯信息的时候也是显示修改后的值。

function foo($x){$x = 42; throw new Exception;}foo("string");

PHP7的运行结果:Stack trace:

#0 file.php(4): foo(42)

#1 {main}

PHP5的运行结果:Stack trace:

#0 file.php(4): foo('string')

#1 {main}

这个调整不会影响代码的行为,不过在调试的时候需要注意这个变化。

其他和参数有关的函数都是同样的调整,比如debug_backtrace() .

五、如何升级当前项目代码来兼容PHP7?

逐步剔除php7不支持的代码

检测工具:https://github.com/sstalle/php7cc

检测不兼容PHP7的代码

六、写在最后

PHP7 2倍性能飙升,你心动了吗,赶紧下载代码运行吧~

附录:

php7官方文档:http://php.net/manual/zh/migration70.new-features.php

鸟哥的博客:http://www.laruence.com

展开
收起

PHPDoc/PHPDocumentor生成API文档

PHPDocumentor是一个用PHP写的强大的文档自动生成工具,对于有规范注释的php程序,能够快速生成具有结构清晰、相互参照、索引等功能的API文档。旧版本是PHPDoc,PHPDoc是PEAR下面的一个非常优秀的模块,类似于javadoc。从1.3.0开始,更名为phpDocumentor,新版本新加了对php5语法的支持,同时,可以通过在客户端浏览器上操作生成文档,文档可以转换为PDF、HTML、CHM等格式的文档,这样非常有利于代码的升级、维护、移交等。

前提:安装的前提是已经安装了php环境,我安装的是xampp集成开发环境。

1.PHPDoc的结构及功能

PHPDoc是全部采用OOP的思想来编写的,这也是PEAR所推荐的方式,PHPDoc的工作原理:PHPDoc扫描指定目录下面的php源代码,扫描其中的关键字,截取需要分析的注释,然后分析注释中的专用的tag,生成xml文件,接着根据已经分析完的类和模块的信息,建立相应的索引,生成xml文件对于生成的xml文件,使用定制的模板输出为html文件。从设计上来说,PHPDoc使用了2个超类:PhpdocObject和PhpdocError。这是整个PHPDoc的基本类,这种方式也是PEAR所推荐的。当你编写应用框架时,最好能够有一个基本的超类,而其他的子类或者是功能类都有一个共同的祖先。在扫描源代码过程中,PHPDoc使用的是类似GREP的形式。PHPDoc令人满意的另一方面是其分析结果是以XML形式保存的,这就意味着其他应用程序可以共享这个数据,同时PHPDoc也提供了相应的接口,你可以实现这个接口,把API文档生成其他的形式,比如PDF,LATEX,WORD等。目前,PHPDoc的分析结果可以以HTML形式表现,由于使用了模板机制,可以很方便地定制风格。

2.安装PHPDoc

安装方式有两种,一是下载源码安装,另一种是通过pear安装。

第一种方法:

第一步:安装pear

使用dos窗口进入php安装目录,有个文件叫go-pear.bat,如果没有,建议到网上下载go-pear.phar,然后在dos窗口下运行 go-pear.phar, 从而安装pear。

php go-pear.phar

第二步:安装phpdoc

Pear install phpDocumentor

在phpDocumentor成功安装后,php安装目录下会多出来一个phpdoc.bat。这个文件就是我们用来生成文档的批处理文件。

在phpdoc.bat所在目录下,输入

Phpdoc –h

会得到一个phpDocumentor的详细参数列表。先看看最重要的几个吧。

-d

这个目录代表着需要生成文档的原始php文件目录(注意是目录)

-t

这个目录代表着生成的文档存放目录

-o

这个参数代表着生成的文档格式,例如html格式,参数就是

HTML:frames:phpedit

第三步:生成文档

生成文档的命令就是:

phpdoc -d "D:\phpdoc\1" -t "D:\phpdoc\1" -o "HTML:frames:phpedit"

可以看到,解析完成后,在目标目录下生成很多html文件,打开index.html文件,就是我们需要的文档,如上图所示。

第二种方法:

第一步:下载PHPDoc压缩文件(phpdoc.zip),地址如下:

http://star7th-wordpress.stor.sinaapp.com/uploads/2013/04/phpdoc.zip

第二步:解压到某一个目录

打开phpdoc.bat,编辑第16行:

SET phpCli=D:\xampp\php\php.exe

配置phpCli 为自己php.exe文件的路径即可。

第二步:dos窗口,进入文件的解压目录,然后执行解析文档命令即可。

phpdoc -d "D:\phpdoc\1" -t "D:\phpdoc\1" -o "HTML:frames:phpedit"

以上是安装phpDocumentor1版本,目前已经更新到phpDocumentor2版本了,version2的安装也很简单。

第一步:安装pear(同上)

此处给出下载地址:http://pear.php.net/go-pear.phar

将 go-pear.phar 放到 PHP 目录下执行安装命令:

php go-pear.phar

下面会执行输入 system

然后一路回车安装完毕。

第二步:接下来安装类关系绘图用到的工具

pear install image_graphviz

下载 http://www.graphviz.org/Download_windows.php graphviz-2.38.msi

安装后,注意环境变量 path 添加上该 bin 的路径,重启电脑,否则无法生效

第三步:安装 phpDocumentor

pear channel-discover pear.phpdoc.org

pear install phpdoc/phpDocumentor

稍等一会,安装步骤完成!

注意:两个软件安装后的目录都在PHP 下的 pear 下面:

php/pear/PhpDocumentor

php/pear/Image

显然:version2 比version1速度快了很多。

展开
收起

2019,看 PHP 未来发展

关于 P++ idea

最近 Zeev Suraski 在 php.net 的 wiki 上提出了一个 idea,是关于打造一个 P++ 的 PHP 项目。

P++,静态化的 PHP。但是,有这么一段话:

This is not a fork. The codebase will be identical, it would be versioned together and developed by the same people. The binaries will be identical - if you’d install PHP, you’d be installing P++ and vice versa. The same binary will be running your PHP, P++ or combined PHP/P++ apps.

意思是 P++ 不是 PHP 的另一个分支,而是共存的。在 PHP 环境下,多了一种选择,让我们可以用静态语言的方式去写代码。

<?p++?><?php'Hello, world!'; ?>这真是让我虎躯一震,PHP 核心开发者竟然也提出这种方案了。

这个方案究竟如何,为此我还去推特上看了看,除了一些直接叫好的人外,还有一些人的想法是这样的:

静态语言模式的 PHP 并不能给 PHP 带来什么质的飞跃,应该寻思着怎么通过添加功能来获得更多收益,而不是更改语法和语言规则看起来像是 FB 的 Hack/PHP 在 HHVM 做的事是否考虑渐进类型为什么不在目前的严格类型声明模式下去拓展这不禁让人想问,PHP 目前遇到了什么问题?

目前 PHP 的状况

最近这几年,PHP 确实是处于很尴尬的地位。虽然 PHP 在小公司里仍然占据很高的地位,但是随着业务的不断发展,很多公司不免都走上了 PHP 转 Java、PHP 转 Go 的路子上,亦或是将 PHP 逼向上层业务系统或者边缘化业务中。我的上一家公司,在我走之后,就开始招 Java 进行微服务改造了。

目前国内 PHP 的大梁,被 Swoole 硬生生给拉起来了,Swoole 的出现确实是给 PHP 注入了新的生命。但是呢,当我第一次接触 Swoole 的时候,我就感觉, Swoole 是在向 Go 靠拢,包括后来的 Swoole 4 协程,都有一种 PHP 中的 Go 的意思。而且韩大确实也表达了对 Go 语言的致敬。所以在刚接触 Swoole 时,我的想法是,为何不干脆上 Go 呢,然后我就转向学习 Go 语言,之后一发不可收拾,很大一段时间我都把功夫放在 Go 上了,现在我甚至不想重回 PHP。PHP 能做到的事,Go 都能做;Go 能做到的事,PHP 未必能或者未必能做得那么好。虽然 PHP 简单粗暴的优点相比 Go 还是存在优势,但是这不妨碍我喜欢上用 Go 语言。

PHP 就死了吗?

现在很多 “PHP已死” 的声音,还有“PHP正在走下坡路”之类的。说实话,确实有走下坡路的趋势,但是离死还差得远。

来看看这个统计就知道:

现在还是有 79% 的网站是由 PHP 打造,ASP 都没死,PHP 怎么会死呢,可以说未来10年 PHP 开发者都还能找到工作。不过这个统计不能说明什么,因为历史遗留的站点也包含其中,ASP Web开发者现在确实少见了吧。

不过 PHP 现在必须寻找出路了,PHP 单是性能上的提升,目前来看并没有给 PHP 带来很大的关注度,毕竟这门语言有诸多限制。所以 P++ 的提出,也是体现了 PHP 核心成员也是在给 PHP 寻找出路。

为什么这么尴尬

P++ 方案,在我看来,其实是违背了 PHP 的初心,但是如果保留初心,却没有出路,被其他语言蚕食份额,这正是尴尬点所在。

将 PHP 改造成静态类型语言,并不能改变给 PHP 的应用场景带来什么变化,其实有一大批开发者也是更倾向于动态脚本语言的;让 PHP 同时维持两种模式,又显得有些不三不四,本身 PHP 的一大槽点就是乱,这样反而会更乱。还不如学习 TypeScript 之于 JavaScript, 现在 TypeScript 的呼声还是挺高的。

PHP 本身的定位就是适合快速开发的服务器端编程语言,原本就适合与其它语言搭配,比如 PHP + Java/Go/C++ 进行优势互补就是一种选择方式,只不过这种配合方式是可以被取代的,将 PHP 复杂化似乎不符合其定位。

未来

以上都是个人看法。

作为一个 PHPer,PHP 作为我过去几年的核心开发语言,对 PHP 我还是很有情怀的。个人来看,PHP 的未来,就看接下来的 3~5 年的动作了,不管是 JIT 也好,P++ 也好,还是别的新理念新功能,必须要有让人眼前一亮的东西出现,否则还会继续走下坡路。

让我们一起期待吧。

展开
收起

快速搭建Apache+php部署环境,绝无废话

快速开始,绝无废话

我的linux服务器系统是CentOS 6.5

1,安装apache:

yum install httpd

apache的文件目录 /var/www/html

apache启动,停止,查看状态的命令:

service httpd startservice httpd stopservice httpd status

配置文件 /etc/httpd/conf/httpd.conf

修改端口(默认是80) Listen 8082

修改ServerName ServerName localhost:8082

测试,能出来页面OK了

2,安装php

yum install phpphp-devel

安装好后,php -v 查看一下

能出来版本说明ok

再重启一下apache

service httpd restart

写个php页面测试

在apache的文件目录 /var/www/html下,创建一个test.php

<?php echo "Hello world!"; ?><?php phpinfo(); ?>

保存后,回到浏览器测试

完成,

3,连接mysql

mysql的安装,略。公司有DBA,呵呵。

先安装php的扩展

yum install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc

安装完扩展之后需要再次重启apache

service httpd restart

测试mysql是否链接成功的php代码

<?php$servername = "localhost"; $username = "username";$password = "password"; $dbname = "数据库名"; $port = "端口"; // 创建连接$conn = new mysqli($servername, $username, $password, $dbname, $port); // 检测连接if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } echo "连接成功";?>

完成。开始撸代码。

P.S:

吐槽一下,百家号这个编辑器,贴个代码是真费劲啊

展开
收起

为什么大家总喜欢黑PHP?PHP到底做错了什么

  所谓一粉顶十黑,“PHP是最好的语言”的梗即由此而来,其实它并不是讽刺PHP语言本身,而是在讽刺并不深入理解PHP的开发者。

  

  PHP有很多奇怪的设计,令大部分人必须有个参考手册握在手边才敢写代码,但它仍然能够吸引众多开发者。最重要的原因是:它拥有门槛低和用户群体大的优势。

  

  但是用户群大了,各种水平的人都会有。

  入门虽然很容易,但精通PHP是很难的,毕竟这个语言及其标准库里有太多未定义行为。

  用户群中存在不少并不够精通PHP的群体,有些人没有真正尝试过其它语言,没经历过这些语言和解释器设计不佳的部分;也有些人由于长期使用PHP,对它产生了异常深厚的情感。

  于是产生了一种现象:有些人认为PHP就是最简单最完善最好的语言,并且热衷于在各种论坛等地方与其他人进行争辩。

  

  

  后来PHP语言招黑,乃至“PHP是最好的语言”成为一个讽刺PHP开发者的梗,

  实际上还是由于2010年后移动app开发的火爆,移动开发和Web开发者地位的此消彼长而导致。

展开
收起

认识PHP,快速搭建PHP环境

织梦DEDECMS建站学习02

1.认识php

PHP:

PHP: Hyper text Preprocessor"的缩写,即“超文本预处理器。PHP是一种功能强大,并且简便易用的脚本语言,它可嵌入到HTML中,尤其适合web开发。

起源:

1994年Rasmus创造了PHP (这完全是Rasmus的个人爱好)

1997年,Zeey、Andi重写了解析器,发展到php3。 (有了队伍)

2000年5月,php4发布,它使用了Zend引擎(Zeey+Andi)。(有 了标准)

2004年7月,php5正式发布。(飞速发展,不断创新)

PHP的最版本为PHP 7. X。

PHP的官方网址下载。

特点:

PHP是免费的;

效率高: PHP消耗相当少的系统资源;

易学易用,功能强太;

跨平台的。可以运行在UNIX、LINUX、WINDOWS下;

嵌入HTML:因为PHP可以嵌入HTML语言,学习起来并不困难;

PHP5是面向对象的。

... ...

2.PHP优势

PHP优势

3. PHP运行环境

PHP运行前提:1.操作系统,2.WEB服务器,3.PHP组件

WAMP: Windows+Apache+Mysql+Php

WNMP: Windows+Nginx+Mysql+Php

LAMP: Linux+Apache+Mysql+Php

LNMP: Linux+Nginx+Mysql+Php

Apache HtTP Server (简称Apache)是Apache软件基金会的一个开放源码的网页服务器。Apache是世界使用排名第一的Web服务器软件。 它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。

Nginx("enginex")是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的Web和反向代理服务器,也是一IMAP/POP3/SMTP代理服务器。在高连接并发的情况下,Nginx是Apache服 务器不错的替代品。

安装了PHP环境之后,Apache/Nginx才可能运行PHP文件。

新手安装过程推荐组合包安装!

官方网站:自行下载

注意:我们还可以安装zend引擎:用于php优化。

windows下安装:

推荐软件: phpstudy 官网下载

phpstudy

4.第一个PHP页面

1)路径:www下新建目录文件,用于区别不同项目

目录

2)代码:

代码

3)访问:浏览器输入本机网址路径:127.0.0.1/stedy/index.php

网址

最终执行结果!

展开
收起