PHP 开发基础

PHP 开发基础

内容导读:

  • PHP 标记
  • 编码规范
  • 代码注释
  • 常量
  • 变量
  • 数据类型
  • 运算符

1.PHP 标记

PHP 和其他几种 Web 语言一样,都是使用一对标记对将 PHP 代码部分包含起来,以便和 html 代码相区分。当解析一个文件时,PHP 会寻找起始结束标记,也就是 <?php?>,这告诉 PHP 开始和停止解析二者之间的代码。此种解析方式使得 PHP 可以被嵌入到各种不同的文档中去,而任何起始和结束标记之外的部分都会被 PHP 解析器忽略。

PHP 中一共有四种标记风格,其中脚本风格和ASP 风格在 PHP 7 中已经废止。简短风格需要在 php.ini 中开启 short_open_tag开关或者 CLI 中使用了配置选项 --enable-short-tags

1.1 XML

<?php echo "这是XML风格的标记"; ?>

XML风格的标记是本书所使用的标记,也是推荐使用的标记,服务器不能禁用。该风格的标记在 XML、XHTML 中都可以使用。

1.2 简短风格

<? echo '这是简短风格的标记'; ?>

1.3 脚本风格

<script language="php"> echo '这是脚本风格的标记'; </script>

1.4 ASP 风格

<% echo '这是ASP风格的标记'; %>

1.5 需要注意

如果文件内容是纯 PHP 代码,最好在文件末尾删除 PHP 结束标记。这可以避免在 PHP 结束标记之后,万一意外加入了空格或者换行符,会导致 PHP 开始输出这些空白,而脚本中此时并无输出的意图。

<?php echo "Hello world"; echo "Last statement"; // 脚本至此结束,并无 PHP 结束标记

2.编码规范

2.1 书写规范

[1].缩进

使用制表符(键)缩进,缩进单位为 4 个空格。编辑器中统一设置Tab 转换成 4 个空格。

[2].大括号{}

有两种大括号放置规则是可以使用的:

if ($expr) { … }

或者

if ($expr){ … }

[3].关键字、小括号、函数、运算符

  • 小括号和关键字间用空格隔开。如:

if ($expr){ //if和“(”之间有一个空格 … }

  • 小括号和函数要紧贴在一起。以便区分关键字和函数。如:

round($num) //round和“(”之间没有空格

  • 运算符与两边的变量或表达式要有一个空格(字符连接运算符“.”除外)。如:

while ($boo == true){ //$boo和“==”,true和“==”之间都有一个空格 … }

  • 当代码段较大时,上、下应当加入空白行,两个代码块之间只使用一个空行,禁止使用多行。

  • 尽量不要在 return 返回语句中使用小括号。如:

return 1; //除非是必要,否则不需要使用小括号

2.2 命名规则

[1].类命名

  • 使用大写字母作为词的分隔,其他的字母均使用小写。
  • 名字的首字母使用大写。
  • 不要使用下划线(‘_’)

如:Name、SuperMan、BigClassObject

[2].类属性命名

  • 属性命名应该以字符“m”为前缀。
  • 前缀“m”后采用与类命名一致的规则。
  • “m”总是在名字的开头起修饰作用,就像以“r”开头表示引用一样

如:mValue、mLongString

[3].方法命名

方法的作用都是执行一个动作,达到一个目的。所以名称应该说明方法是做什么。一般名称的前缀和后缀都有一定的规律,如:Is(判断),Get(得到),Set(设置)。

方法的命名规范和类命名是一致的。

如:

class Example{ $mExam = ""; function SetExam(&$rExam){ … } function &rGetExam(){ … } }

[4].方法中参数命名

  • 第一个字符使用小写字母。
  • 在首字符后的所有字符都按照类命名规则首字符大写。

如:

class EchoAnyWord{ function EchoWord($firstWord,$secondWord){ … } }

[5].变量命名

  • 所有字母都使用小写。
  • 使用’_’作为每个词的分界。

如:

$msg_error; $chk_pwd;

[6].引用变量

引用变量要带有“r”前缀。如:

class Example{ $mExam = ""; function SetExam(&$rExam){ … } function &rGetExam(){ … } }

[7].全局变量全局变量应该带前缀“g”。如:

$global = $gTest;$global = $g

[8].常量/全局常量常量/全局常量,应该全部使用大写字母,单词之间用“_’”来分割。如:

define('DEFAULT_NUM_AVE',90); define('DEFAULT_NUM_SUM',500);

[9].静态变量静态变量应该带前缀“s”。如:

static $sStatus = 1;

[10].函数命名所有的名称都使用小写字母,多个单词使用“__”来分隔。如:

function this_good_idea(){ … }

[11].以上的各种命名规则,可以组合一起来使用。如:

class OtherExample{ $msValue = ""; //该参数既是类属性,又是静态变量 }

3.代码注释

注释即代码的解释和说明,一般放到代码的上方或代码的尾部。用来说明代码或函数的编写人、功能、时间等。

PHP 支持3种风格的程序注释。

  • C++风格的单行注释(//)

<?php echo '使用C++风格'; //这就是C++风格 ?>

  • C 风格的多行注释(//)

<?php /*C风格的 多行注释 */ echo '只会看到这句话'; ?>

注意:多行注释是不允许进行嵌套操作的。

  • Shell 风格的注释(#)

<?php echo '这是Shell脚本风格的注释'; #这里的内容是看不到的 ?>

注意:在单行注释中的内容不要出现“?>”标志,解释器会认为 PHP 脚本结束,而去执行“?>”后面的代码

4.常量

4.1 声明和使用常量

常量:可以理解为值不变的量。常量值被定义后,在脚本的其他任何地方都不能改变。

常量的组成规则:一个常量由英文字母、下划线和数字组成,但数字不能作为首字母出现。

在 PHP 中使用 define()函数来定义常量,该函数的语法格式为:

/*关键字.使用 const 关键字定义常量必须处于最顶端的作用区域,因为用此方法是在编译时定义的。这就意味着不能在函数内,循环内以及 if 或 try/catch 语句之内用 const 来定义常量*/ const bool define ( string name, mixed value [, bool case_insensitive] )

获取常量的值

  • mixed constant(string const_name)
  • 使用常量名直接获取值

判断常量是否定义:

  • bool defined(string constant_name);成功则返回 true,否则返回 false

关于常量的几点说明:

  • 常量前面没有美元符号($);
  • 常量只能用 define() 函数定义,而不能通过赋值语句;
  • 常量可以不用理会变量范围的规则而在任何地方定义和访问;
  • 常量一旦定义就不能被重新定义或者取消定义;
  • 常量的值只能是标量。

4.2 预定义常量

常量名 功能
FILE 默认常量,PHP 程序文件名
LINE 默认常量,PHP 程序行数
PHP_VERSION 内建常量,PHP 程序的版本,如 7.3.12
PHP_OS 内建常量,执行 PHP 解析器的操作系统名称,如 Windows
TRUE 该常量是一个真值(true)
FALSE 该常量是一个假值(false)
NULL 一个 null 值
E_ERROR 该常量指到最近的错误处
E_WARNING 该常量指到最近的警告处
E_PARSE 该常量指到解析语法有潜在问题处
E_NOTICE 该常量为发生不寻常处的提示但不一定是错误处

注意

常量的值只能是标量

5.变量

5.1 声明变量

变量是指在程序执行过程中数值可以变化的量。变量通过一个名字(变量名)来标识。系统为程序中的每一个变量分配一个存储单元,变量名实质上就是计算机内存单元的命名。因此,借助变量名即可访问内存中的数据。

[1]变量定义

PHP 是弱类型语言,使用变量之前不需要声明变量(PHP 4 之前需要声明变量),只需为变量赋值即可。变量的语法格式如下:

$变量名称=变量的值;

[2]变量名规则

  • 在 PHP 中的变量名是区分大小写的。
  • 变量名必须是以美元符号($)开始。
  • 变量名开头可以以下划线开始。
  • 变量名不能以数字字符开头。
  • 变量名可以包含一些扩展字符(如重音拉丁字母),但不能包含非法扩展字符(如汉字字符和汉字字母)。

5.2 变量赋值

[1].直接赋值

直接赋值就是使用“=”直接将值赋给某变量

<?php $name = value;//value表示值 ?>

[2].传值赋值

传值赋值就是使用“=”将一个变量的值赋给另一个变量

<?php $hello="ok"; $test = $hello; ?>

[3].引用赋值

引用赋值是一个变量引用另一个变量的值

<?php $hello="ok"; $test = &$hello;//注意此处的 & 符号 $test=3; echo $hello; ?>

5.3 变量作用域

作 用 域 说 明
局部变量 在函数的内部定义的变量,其作用域是所在函数
全局变量 被定义在所有函数以外的变量,其作用域是整个 PHP 文件,但在用户自定义函数内部是不可用的。如果希望在用户自定义函数内部使用全局变量,则要使用 global 关键字声明
静态变量 能够在函数调用结束后仍保留变量值,当再次回到其作用域时,又可以继续使用原来的值。而一般变量是在函数调用结束后,其存储的数据值将被清除,所占的内存空间被释放。使用静态变量时,先要用关键字static来声明变量,把关键字 static 放在要定义的变量之前
超全局变量 它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行global $variable; 就可以访问它们。$GLOBALS$_SERVER$_REQUEST$_POST$_GET$_FILES$_ENV$_COOKIE$_SESSION

5.4 变量的主动销毁

`void unset(变量);

<?php $hello='ok'; unset($hello); echo $hello;//报错 ?>

`

5.5 可变变量

可变变量是一种独特的变量,这种变量的名称是由另外一个变量的值来确定的,声明可变变量的方法是在变量名称前加两个“$”符号。

语法如下:

$$ 可变变量名称=可变变量的值;

如:

<?php $hello="ok";//注意这里单、双引号皆可以 $ok="我是字符串"; echo $$hello; ?>

5.6常量变量区分

  • 常量前没$
  • 常量只能用define()函数定义,不能通过赋值语句定义
  • 常量不会理会变量的范围规则而在任何地方定义和访问
  • 常量一旦定义就不能被重新定义或者取消定义
  • 常量的值只能是标量

6.数据类型

6.1 8 种原始类型

  • 4 种标量类型

boolean(布尔型) integer(整型) float/double(浮点型) string(字符串型)

  • 两种复合类型

array(数组) object(对象)

  • 两种特殊类型

resource(资源) NULL。

6.2 标量类型

6.2.1 布尔型

较为常用的数据类型之一,它保存一个 true 值或者 false 值,其中 true 和 false 是 PHP 的内部关键字。通过 boolean 关键字程序实现逻辑判断功能。

其他的数据类型都有布尔属性:

  • 整型:为 0 时,其布尔值为 false;非零为 true。
  • 浮点型:为 0.0 时为 false。否则为 true。
  • 字符串型:为“”或者字串“0”时为 false,否则为 true;
  • 数组型:不含任何元素时为 false,否则为 true;
  • 对象和资源型,永远为 true;
  • NULL 型,永远为 false;

6.2.2 整型

整型数据类型只能包含整数。在 32 位的操作系统中,有效的范围是-2^31 ~ 2^31-1。64 位为-2^63^~ 2^63^-1

整型数可以用二、十、八和十六表示。用八进制前面必须加 0,十六进制则需要加 0x。二进制加 0b。

警告

PHP 7 以前的版本,如果向八进制数传递了一个非法数字(即 8 或 9),则后面其余数字会被忽略。PHP 7 以后,会产生 Parse Error。其他进制也是一样!!

6.2.3 浮点型

浮点数据类型用于表示实数。它提供的精度比整数大得多。在 32 位的操作系统中,有效的范围是 1.7E- 308 ~ 1.7E+308。在 PHP 4.0 以前的版本中,浮点型的标识为 double,也叫做双精度浮点数,两者没有区别。默认有两种书写格式:

  • 标准格式。如 3.1415 -35.8
  • 科学记数法格式:3.58E1 849.72E-3

注意

浮点型的数值只是一个近似值,要尽量避免浮点型数值之间比较大小,因为最后的结果往往是不准确的。

6.2.4 字符串型

字符串是连续的字符序列,由数字、字母和符号组成。字符串中的每个字符只占用一个字节。在 PHP 中,有 3 种定义字符串的方式,分别是单引号(’)、双引号(”)和界定符(<<<)。

<?php $a =‘字符串’;?> <?php $a ="字符串";?> <?php $a= <<<TXT //名字自定,保持上下一致即可。 你好 TXT; ?>

单引号与双引号区别:

双引号中所包含的变量会自动被替换成实际数值,而单引号中包含的变量则按普通字符串输出。

使用单引号时,只要对单引号“ ‘ ”进行转义即可,但使用双引号(“)时,还要注意“ ” ”、“$”等字符的使用。这些特殊字符都要通过转义符“\”来显示。

常用的转义字符如下表所示。

转义字符 输出
\n 换行(LF 或 ASCII 字符 0x0A(10))
\r 回车(CR 或 ASCII 字符 0x0D(13))
\t 水平制表符(HT 或 ASCII 字符 0x09(9))
\ 反斜杠
$ 美元符号
' 单引号
" 双引号
[0-7]{1,3} 此正则表达式序列匹配一个用八进制符号表示的字符,如\467
\x[0-9A-Fa-f]{1,2} 此正则表达式序列匹配一个用十六进制符号表示的字符,如\x9f

注意

如果对非转义字符使用了“\”,那么在输出时,“\”也会跟着一起被输出。

Unix 系统里,每行结尾只有“<换行>”,即“\n”;Windows 系统里面,每行结尾是“<回车><换行>”,即“\r\n”

6.2.5标量类型声明

用作于函数调用和返回语句。

强制模式(默认)

严格格式:严格要求用户的数据输入类型

语法格式:

declare(strict_types=1);//1表示严格校验,0表示强制模式 function sum(int ...$ints){ return array_sum($ints); } print (sum(2,'3',4));//设置第一行开关进行测试

可用于声明标量类型的参数类型包括:

int float bool string interface array callable

6.3 复合类型

6.3.1 数组

数组是一组数据的集合,它把一系列数据组织起来,形成一个可操作的整体。数组中可以包括很多数据,如标量数据、数组、对象、资源以及 PHP 中支持的其他语法结构等。数组中的每个数据称为一个元素,元素包括索引(键名)和值两个部分。元素的索引可以由数字或字符串组成,元素的值可以是多种数据类型

语法格式及案例:

$array = ['value1',' value2 '……]; //或 $array[key] = 'value'; //或 $array = array(key1 => value1, key2 => value2……); //案例 $arr1 = array('This','is','a','example'); $arr2 = array(0 => 'php', 1=>'is', 'the' => 'the', 'str' => 'best'); $arr3[0] = 'tmpname';

6.3.2 对象(object)

编程语言所应用到的方法有两种:面向过程和面向对象。这里的对象指的是面向对象中的类的实例。

6.4 特殊数据类型

6.4.1 资源(resource)

资源类型是 PHP 4 引进的。在使用资源时,系统会自动启用垃圾回收机制,释放不再使用的资源,避免内存消耗殆尽。因此,资源很少需要手工释放。对象、打开的文件,数据库连接都是资源类型。

6.4.2 空值(null)

表示没有为该变量设置任何值,另外,空值(null)不区分大小写,null 和 NULL 效果是一样的。

被赋予空值的情况有以下 3 种:

  • 还没有赋任何值
  • 被赋值 null
  • 被 unset()函数处理过的变量

说明

is_null()函数是判断变量是否为 null,如果变量为 null,则返回 true,否则返回 false。

6.5数据类型转换

虽然PHP是弱类型语言,但有时仍然需要用到类型转换。

6.5.1自动转换

6.5.2强制转换

[1] 只需在变量前加上用括号括起来的类型名称即可。允许转换的类型如下表:

转换操作符 转换类型 举例
(boolean) 转换成布尔型 (boolean)$num、(boolean)$str
(string) 转换成字符型 (string)$boo、(string)$flo
(integer) 转换成整型 (integer)$boo、(integer)$str
(float) 转换成浮点型 (float)$str、(float)$str
(array) 转换成数组 (array)$str
(object) 转换成对象 (object)$str

注意

  • 转换成boolean型时,null、0和未赋值的变量或数组会被转换为false,其他的为真
  • 转换成整型时,布尔型的false转换为0,true转换为1,浮点型的小数部分被舍去,字符型如果以数字开头就截取到非数字位,否则输出0。

[2] 使用Settype函数

bool settype ( mixed var, string type )//mixed是伪类型

注意

type的值不能是资源类型,转型成功返回true,否则返回false。

[3]两种方式区别

方法[1]中不改变原数据。方法[2]则会改变原有数据类型和值。

6.6数据类型检测

[1] PHP内置以下检测函数,判断其是否属于某个类型,如果符合则返回true,否则返回false。

函数 检测类型 举例
is_bool 检查变量是否是布尔类型 is_bool(true)、is_book(false)
is_string 检查变量是否是字符串类型 is_string(‘string’)、is_string(1234)
is_float/is_double 检查变量是否为浮点类型 is_float(3.1415)、is_float(‘3.1415))
is_integer/is_int 检查变量是否为整数 is_integer(34)、is_integer(‘34’)
is_null 检查变量是否为null is_null(null)
is_array 检查变量是否为数组类型 is_array($arr)
is_object 检查变量是否是一个对象类型 is_object($obj)
is_numeric 检查变量是否为数字或由数字组成的字符串 is_numeric(‘5’)、is_numeric(‘bccd110’)

[2] var_dump函数直接查看

void var_dump ($expression, $_ = null)

7.运算符[^1]

7.1 各种运算符

[^1]: PHP Manual-语言参考-运算符

[1]算术运算符

[2]字符串运算符

有两个字符串(string)运算符。

  • 连接运算符(”.”),它返回其左右参数连接后的字符串。
  • 连接赋值运算符(”.=“),它将右边参数附加到左边的参数之后。

[3]赋值运算符

“=”右边的值赋给左边的变量或者常量

a.引用赋值

PHP 支持引用赋值,使用”$var = &$othervar;”语法。引用赋值意味着两个变量指向了同一个数据,没有拷贝任何东西。

b.算术赋值运算符

c.位赋值运算符

d.其他赋值运算符

[4] 位逻辑运算符

对二进制位从低位到高位对齐后进行运算

注意

  • 左移如果超出位数,返回0.

  • 位移负的位置,会产生异常(1>>-1)

  • 右移如果超出位数,返回0(1>>64)或-1(-1>>64).

[5]比较运算符

对变量或表达式的结果进行大小、真假等比较,如果比较结果为真,则返回true,如果为假,则返回false

图片

注意

==与===区别

!==表示可能数值不同,可能类型不同

[6]错误控制运算符

@错误屏蔽运算符可以对程序中出现错误的表达式进行操作,对错误信息进行屏蔽,其使用的方法就是在错误的表达式前加上@。例:

<?php $err = @(5 / 0);//分别测试带@与不带@的输出结果 ?>

[7]三元运算符

(expr)?(expr2):(expr3)//expr成立执行expr2,否则执行expr3

[8]否定控制运算

用在操作数之前,用于对操作数值进行否定。包含逻辑否定和按位否定。

否定控制运算符 含义
逻辑否
~ 按位否

[9]合并运算符合组合运算符

(expr)??(expr2)//php7新增,如果expr为真,返回expr,否则返回expr2 (expr)<==>(expr2) //php7新增,如果>或者<或者=,分别返回1,0,-1

7.2运算符优先级与结合性

所谓运算符的优先级,是指在应用中哪一个运算符先计算,哪一个后计算,与数学的四则运算遵循的“先乘除,后加减”是一个道理。运算符在运算中遵循的规则是:优先级高的运算先执行,优先级低的操作后执行,同一优先级的操作按照从左到右的顺序进行。也可以像四则运算那样使用小括号,括号内的运算最先进行。

下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。

图片

8.表达式与语句

表达式式在特定语言中表达一个特定的操作或动作的语句。一个表达式包含操作数和操作符。

$a=5 //表达式 $a=5; //语句
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...
read.douban.com/reader/column/4096...

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!