/*
* demo.php 文件
*/
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<h1>PHP</h1>
<?php
echo "Hello PHP!";
?>
</body>
</html>
- 1.PHP 文件的默认文件扩展名是 .php。
- 2.PHP 文件通常包含 HTML 标签、JavaScript 脚本代码 和 PHP 脚本代码。
- 3.PHP 中的每个代码行都必须以分号 ; 结束。分号是一种分隔符,用于把指令集区分开来。
- 4.通过 PHP,有两种在浏览器输出文本的基础指令:echo 和 print。
PHP 脚本可以放在 .php 文档中的任何位置。PHP 脚本以 <?php 开始,以 ?> 结束。
PHP 和其他 Web 语言一样,都是使用一对标签(<?php ?>)将 PHP 代码包裹起来,以便和其他 HTML 代码、JavaScript 脚本相区分。
PHP 支持 4 种标记风格。
XML 风格(推荐)
XML 风格是推荐使用的 PHP 标记风格,服务器不能禁止。该风格的标记在 XML、XHTML 中也能使用。
echo "<p>Hello world!</p>" //单行注释
#单行注释
echo "<p>Hello world!</p>"
#单行注释
#单行注释
#单行注释
echo "<p>Hello world!</p>"
/*
多行
注释
*/
echo "<p>Hello world!</p>"
/*
*多行
* 注释
*/
echo "<p>Hello world!</p>"
程序注释是书写规范程序很重要的一个环节。注释主要针对代码的解释和说明,用来解释脚本的用途、版权说明、版本号、生成日期、作者、内容等,有助于对程序的阅读理解。
合理使用注释注意以下原则:
- 1.注释必须准确、易懂、简洁。
- 2.注释在编译代码时会被忽略,不会被编译到最后的可执行文件中,所以注释不会增加可执行文件的大小。
- 3.注释可以书写在代码中的任意位置,但是一般写在代码的开头或者结束位置。
- 4.修改程序代码时,一定要同时修改相关的注释,保持代码和注释的同步。
- 5.在实际的代码规范中,要求注释占程序代码的比例达到 20% 左右,即 100 行程序中包含 20 行左右的注释。但也要防止没必要的重复注释信息。
- 6.在程序块的结束行右方加注释标记,以表明某程序块的结束。
- 7.避免在注释中使用缩写,特别是不常见缩写。
- 8.注释与所描述内容进行同样的缩排,可使程序排版整齐,并方便注释的阅读与理解。
总之,注释很重要,与程序代码同样重要。
PHP 常量
/*
* 使用 define() 函数来定义常量
* 使用 constant() 函数动态获取常量值(constant[ˈkɑːnstənt]常数、常量)
* 使用 defined() 函数判断一个常量是否已定义
* 使用 get_defined_constants() 函数获取所有当前已定义的常量
*/
/*
* name: "string"
* value: 任意类型
*/
define(name, value)
/*
* constant_name: 必填参数,常量名称,即标识符,为字符串类型
* mixed value: 必填参数,常量的值(混合值,任意类型的值)
* case_sensitive: 可填参数,指定常量是否对大小写敏感,true 为不敏感,false 为敏感(缺省值)(case[keɪs]大小写;sensitive[ˈsensətɪv]敏感的)
*/
define(string constant_name, mixed value, case_sensitive=true)
/*
* 获取指定常量的值和直接使用常量名输出的效果是一样的。但 constant() 函数可以动态地输出不同类型的常量,在使用上更为灵活、方便。
* const_name: 要获取常量值的常量名或者存储了常量名的变量名。
* return mixed: 如果成功则返回常量的值;失败则提示错误信息:常量没有被定义。
*/
mixed constant(string const_name)
/*
* 判断一个常量是否已经被定义。
* string const_name: 要判断该常量是否存在的常量名。
* return bool: 该常量已定义返回 true;该常量未被定义返回 false。
*/
bool defined(string const_name);
<?php
define ("BAICAI_PRICE", "1.00¥/斤"); //定义常量,常量名称为 BAICAI_PRICE(通常为大写)
echo "白菜价格:".BAICAI_PRICE."<br>"; //输出"白菜价格:1.00¥/斤",并换行
echo "白菜价格:".baicai_price."<br>"; //没有该常量(常量默认区分大小写)
define ("APPLE_PRICE", "10.00¥/斤", true); //定义常量 APLLE_PRICE,并设定对大小写不敏感
echo "苹果价格:".apple_price."<br>"; //由于 APPLE_PRICE 常量对大小写不敏感,所以 apple_price 也有作用
echo (defined("BAICAI_PRICE"))."<br>"; //已定义,返回值 true 被 echo 输出为:1
?>
常量可以理解为值不变的变量。常量值被定义后,在脚本的其他任何地方都不能改变。
常量通常具有如下特性:
- 1.常量区分大小写,在定义时可以指定是否大小写敏感。
- 2.常量只能以字母(A~Z, a~z)和下画线(_)开头,后面可以接任意个数的字母字符。
- 3.常量的名称不能以字符 $ 开头。常量的值只能是特定类型:整数、浮点数、字符串和布尔值。
- 3.默认情况下,它的作用域是全局的,即在当前脚本(.php 文件)的任何地方都能使用。
- 4.已定义常重的名称不能与再次定义的常量和变量的名称相同。
- 5.在定义常量时,习惯性使用大写字符,便于阅读和识别。
预定义常量
PHP 中可以使用预定义常量获取 PHP 中的信息。
PHP 预定义常量
常量名 | 功能 |
__FILE__ | 默认常量,PHP 程序文件名。 |
__LINE__ | 默认常量,PHP 程序行数。 |
PHP_VERSION | 内建常量,PHP 程序的版本。例:"3.0.8_dev"。 |
PHP_OS | 内建常量,执行 PHP 解析器的操作系统名称。例:"Windows"。 |
TRUE | 真值。 |
FALSE | 假值。 |
NULL | 一个 null 值。 |
E_ERROR | 这个常量是指到最近的错误处。 |
E_WARNING | 这个常量是指到最近的警告处。 |
E_PARSE | 这个常量是指到解析语法有潜在问题处。 |
E_NOTTCR | 这个常量是指到不寻常处,但不一定是错误处。 |
<?php
echo "当前文件路径:".__FILE__; //PHP 程序文件名
echo "当前行数:".__LINE__; //PHP 程序行数
?>
变量是指在程序执行的过程中其值是可以变化的。变量通过一个名字(即变量名)来标识。系统为程序中的每一个变量分配一个存储单元,变量名实质上就是计算机内存单元的命名。因此,借助变量名就可以访问内存中的数据。
/*
* PHP中的变量用 $ 加变量名来表示。
*/
$name = value;
与其他语言不同,在 PHP 中使用变量之前不需要声明变量(在 PHP4.0 之前需要声明变量),只须为变量赋值即可。PHP 中的变量名称用 $ 和标识符表示,并遵循以下约定:
- 1.变量名区分大小写。
- 2.变量名前面一定是 $。
- 3.变量名开头可以是下划线、字母,但不能是数字。
- 4.变量名可以包含一些扩展字符(如重音拉丁字母),但不能包含非法扩展字符(如汉字字符和汉字字母)。
- 5.使用变量时,只须对变量直接赋值即可。变量赋值是指给变量一个具体的数据值。
除了直接赋值外,还有两种方式来给变量声明或赋值:
- 一种是变量间的赋值。变量间的赋值是指赋值后两个变量使用各自的内存,互不干扰。
- 另一种是引用赋值。从 PHP4.0 开始,PHP 引入了“引用赋值”的概念。用变量给变量赋值后,当改变其中一个变量的值,另一个也随着发生变化。有点像 C 语言里的指针,使用 & 符号表示引用。
<?php
$temp; //Notice: Undefined variable,输出为 null
$temp = ''; //string '' (length=0)
$temp = ""; //string '' (length=0)
$string1 = "wang"; //string 'wang' (length=4)
$string2 = $string1;
$string3 = & $string1;
$string1 = "hao";
/*
* $string1 和 $string3 的值发生变化,为"hao",而 $string2 的值依旧是"wang"
*/
?>
PHP 变量命名规则
变量名除了需要 $ 进行标识外,还有一些规则需要遵守:
- 1.变量名必须以字母或下划线(_)开头,如 $_name、 $name、 $name2 等,但是 $9name 是错的。
- 2.变量名只能由字母、数字、以及 _ 组成,还能包含汉字。如 $name王浩,但是 $name* 是错的。
- 3.变量名不允许包含空格。当变量名由多个单词组成,建议使用 _ 进行分隔。如 $my_apple,称为下划线命名法,或者以大写字母开头比如 $myApple,称为驼峰命名法。
- 4.特别注意:在 PHP 中变量名是区分大小写的,如 $my_book 与 $my_Book 代表两个不同的变量。
- 5.引用变量要带有 r 前缀。
- 6.使用 _ 作为每个词的分界。例如:$msg_error、$chk_pwd 等。
- 7.临时变量通常被取名为 i、j、k、m 和 n,它们一般用于整型;c、d、e、s 它们一般用于字符型。
- 8.实例变量前面需要一个下划线,首单词首字母小写,其余单词首字母大写。
- 9.全局变量应该带有前缀 g。例如:global $gTest。
- 10.常量、全局常量,应该全部使用大写字母,单词之间用 _ 来分割。例如:define('DEFAULT_NUM_AVE', 90);
- 11.静态变量应该带有前缀 s。例如:state $sStatus = 1;
可变变量
可变变量是一种独特的变量,它允许动态地改变一个变量的名称。 工作原理是该变量的名称由另外一个变量的值来确定。实现过程是在变量的前面再多加一个 "$"。
<?php
$name1 = "name2";
$name2 = "wanghao";
echo $name1; //输出"name2"
echo $$name1; //输出"wanghao"
$name2 = "hello";
echo $$name1; //输出"hello"
?>
变量在使用时,要符合变量的定义规则。变量必须在有效范围内使用,如果超出有效范围,即超出变量的作用域,变量也就失去其意义了,即变量变得不可用(获取与修改)。
变量的作用域
作用域 | 说明 |
局部变量 | 即在函数内部定义的的变量,其作用域是所在函数。如果在函数外赋值,将被认为是完全不同的另一个变量。在退出声明变量的函数时,该变量及相应的值就会被清除。 |
全局变量 | 被定义在所有函数以外的变量,其作用域是整个 PHP 文件,但是在自定义函数内部是不可用的。如果要在自定义函数内部使用全局变量,要使用关键字 global。 |
静态变量 | 能够在函数调用结束后仍保留变量值,当再次回到其作用域时,又可以继续使用原来的值。而一般变量在函数调用结束后,其存储的数据值将被清除,所占的内存空间被释放。使用静态变量时,要用关键字 staic 来声明变量。例:在博客中,使用静态变量记录浏览者的人数,在每一次用户访问和离开时,都能够保留目前浏览者的人数。还有在聊天室中,也可以用静态变量记录用户的聊天内容。 |
<?php
$example = "函数外变量(全局)";
function myFunc() {
$example = "函数内变量(局部)";
print "$example"; //函数内部输出局部变量
}
print "$example"; //函数外部输出全局变量
?>
<?php
/*
* 方法体内部的局部变量一般在方法调用完成后由 PHP 将此变量内存清除,而静态变量是当方法完成后在内存中保留
*/
function zdy() {
static $message = 0;
$message += 1;
echo $message." ";
}
function zdy1() {
$message = 0;
$message += 1;
echo $message." ";
}
for($i = 0; $i < 10; $i ++) zdy(); //输出1~10(在原有的基础之上做累计,并且外部不可见)
echo "<br>"
for($i = 0; $i < 10; $i ++) zdy1(); //输出10个1(无累计,并且外部不可见)
?>
自定义函数 zdy() 是输出从 1~10 这 10 个数字,而 zdy1() 函数则输出的是 10 个 1。因为自定义函数 zdy() 含有静态变量,而函数 zdy1() 是一个普通变量。 初始化都为0,再分别使用 for 循环调用两个函数,结果是静态变量的函数 zdy() 在被调用后,保留了 $message 中的值,静态变量的初始化只是在第一次遇到时被执行,以后就不再对其进行初始化操作;而普通变量的函数 zdy1() 在被调用后,其变量 $message 失去了原来的值,重新被初始化为 0。
也就是说,拥有静态变量的 zdy() 函数在反复操作同一个内存单元 $message,创建后没有清除;而普通函数 zdy1() 在反复创建、清除、创建...不同的内存单元(不一定),但它们都有一个相同的名字 $message。
全局变量和函数内部静态变量的区别:全局变量可以在程序中的任何地方访问,但是在自定义函数内部是不可用的。在自定义函数内部使用全局变量,要使用 global 关键字声明。
<?php
$name1 = "wang";
$name2 = "hao";
function printName() {
echo $name1; //$name1 不能被访问,没有输出。Undefined variable
global $name2; //被关键字 global 声明过的变量就是全局变量
echo $name2; //"hao"
}
printName();
?>
变量的生命周期
变量存在的时间称为变量的生命周期,即从变量被声明的那一刻起,直到脚本运行结束。对于过程级(函数)变量,其存活期仅是该过程(函数)运行的时间,该过程(函数)结束后,变量随之消失。在执行过程中,局部变量是理想的临时存储空间。在不同过程(函数)中可以使用同名的局部变量,这是因为每个局部变量只被声明它的过程识别,其生命周期随着过程运行完毕而完结。
PHP 在函数内使用全局变量
在 PHP 中,如果在函数内部要使用全局变量的话,要先用 global 声明该变量。如果不用 global 声明,则会发生 undefined variable 错误。
声明的全局变量会保存在 $GLOBALS 这个超全局变量中,可以在 PHP 的任意处用 $GLOBALS[index] 来访问已经声明过的全局变量,其中 index 为变量的名称。
<?php
$str = "hello";
function sayhi() {
echo $str; //Undefined variable: str
global $str;
echo $str; //"hello"
}
function sayyes() {
echo $GLOBALS['str']; //"hello"
}
?>
说明:
- 1.用户在 PHP 中定义的变量都可以在一个 Hash 表中找到,当定义一个变量时,内核会自动的把该变量的信息存储到一个用 Hash 表实现的符号表中。当用户在 PHP 中调用一个函数或者类的方法时,内核会创建一个新的符号表并激活该符号表,这也是为什么无法在函数中使用函数外定义的变量的原因(因为变量分属两个符号表,一个是当前作用域,一个是全局作用域),如果不是在一个函数里,则全局作用域的符号表处于激活状态。
在计算机的世界里,计算机操作的对象是数据,而每一个数据都有其类型,具备相同类型的数据才可以彼此操作。虽然 PHP 是弱类型语言,但是在某些特定的场合,仍然需要正确的类型。
PHP的数据类型可以分成三种:标量数据类型、复合数据类型(即将多个简单数据类型组合在一起,存储在一个变量名中)和特殊数据类型。
标量数据类型
标量数据类型是数据结构中最基本的单元,只能存储一个数据。PHP 中标量数据类型包括四种:
PHP 中标量数据类型
类型 | 说明 |
boolean(布尔型) | 只有两个值:true(真) 和 false(假)。true 和 false 是 PHP 内部的关键字。定义一个 boolean 型的变量只需将 true 或 false 赋值给它即可。
通常 boolean 型变量都是应用在条件或循环语句的表达式中。
|
string(字符串型) | 连续的字符序列,由数字、字母和符号组成。可以是计算机能表示的一切字符的集合。
字符串中的每个字符占用一字节(1 byte)。
|
integer(整型) | 整数。 |
float(浮点型) | 实数,即带小数点的数 。 |
/*
* 在 PHP 中字符串有3种表示方式:
* 1.单引号:'string'
* 2.双引号:"string"
* 3.界定符: <<<str(换行)string(换行)str
*/
<?php
$name1 = 'wang';
$name2 = "hao";
$say_hi = "Hello World!";
echo "<p>$say_hi</p>" //输出Hello World!
echo '<p>$say_hi</p>'' //输出$say_hi
echo <<<str //界定符开始标志
My name is $name1 $name2.
str; //界定符结束标志
/*
* 界定符的效果和双引号一致。
* 界定符结束标识符必须单独另起一行,并且不允许有空格。如果在界定符结束标识符前后有其他符号或字符,则会发生错误。
*/
?>
单引号与双引号的区别:双引号中所包含的变量会自动被替换成实际数值,而在单引号中包含的变量则按普通字符串输出。
两者之间另一处不同点是对转义字符的使用。使用单引号时,只要对 ' 进行转义就可以了,但使用双引号时,还要注意 "、$ 等字符的使用。这些特殊字符都要通过转义字符"\"来显示。
转义字符
转义字符 | 输出 |
\n | 回车 |
\r | 回车 |
\t | 水平制表符 |
\\ | 反斜杠 |
\$ | 美元符号 |
\' | 单引号 |
\" | 双引号 |
\n 和 \r 在 Windows 系统中没有什么区别,都可以当做回车符。但在 Linux 系统中则是两种效果:\n 表示光标回到行首,但仍然在本行;而 \r 则换到下一行,却不会回到行首。
整型 integer
<?php
$var1 = 123; //十进制
$var2 = 0123; //八进制
$var3 = 0x123; //十六进制
?>
整型数据类型只能包含整数。在 32 位的操作系统中,有效的范围是 -2 147 483 648 ~ +2 147 483 647。整型数可以用十进制、八进制和十六进制来表示。如果用八进制,数字前面必须加 0,如果用十六进制,则需要加 0x。如果给定的数值超出了 int 类型所能表示的最大范围,将会被当做 float 型处理,这种情况叫做整数溢出。同样,如果表达式的最后运算结果超出了 int 的范围,也会返回 float 型。
浮点型 float
单引号与双引号的区别:双引号中所包含的变量会自动被替换成实际数值,而在单引号中包含的变量则按普通字符串输出。
$name1 = 'wang';
$name2 = "hao";
echo "my name is $name1 $name2"; //my name is wang hao
echo 'my name is $name1 $name2'; //my name is $name1 $name2
echo "my name is $name1".'$name2'; //my name is wang$name2
echo 'my name is "$name1" $name2'; //my name is "$name1" $name2
echo "my name is '$name1' $name2"; //my name is 'wang' hao
- 双引号字符串是相对字符串,字符串中的变量名能够被分析器解析,即翻译成变量名对应的变量值。
- 单引号字符串是绝对字符串,字符串中的变量名不会被分析器解析,变量名被当做字符串处理。
定义字符串时,只有一种引号被视为定义符,单引号或者双引号。如果一个字符串以 双引号 开头,那么该字符串就会被当做 相对字符串 来解析,变量名被翻译为相应的变量值,即 $变量名 翻译为 变量值,单引号还是单引号;如果一个字符串以 单引号 开头,那么该字符串就会被当做 绝对字符串 来解析,变量名被当做普通字符串处理,$ 还是 $,双引号还是双引号。
PHP 支持使用和数组下标同样的语法访问字符串下标:
<?php
$name = 'wanghao';
echo $name[0]; //'w'
$name[0] = 'H';
echo $name; //'Hanghao'
?gt;
PHP 并置运算符
并置运算符 . 的两个操作数都会被自动转换为字符串类型。
<?php
$str1 = "hello";
$str2 = "world!";
$new_str = $str1." ".$str2;
echo $new_str; //hello world!
$number = 12345;
echo $new_str.$number; //hello world!12345
?>
count() 函数获取数组长度
<?php
$arr = array('1', '2', '3', '4');
echo count($arr);
?>
利用 for() + count() 遍历数组
<?php
$names = array("wanghao", "xiaoming", "lili");
$arrlength = count($names);
for($i = 0; $i < $arrlength; $i++) {
}
?>
PHP 关联数组(键值对)
$age = array("wanghao"=>"18", "xiaoming"=>"19", "lili"=>"20");
$age['wanghao'] = "18";
$age['xiaoming'] = "19";
$age['lili'] = "20";
遍历关联数组
$age['wanghao'] = "18";
$age['xiaoming'] = "19";
$age['lili'] = "20";
foreach($age as $key=>$value) {
echo "key=".$x."value=".$x_value."<br>";
}
在 PHP 中,编写程序的原则是让代码更容易阅读并且结构更加具有逻辑性,但是有时却频繁编写着相同的代码。如果能够把这些相同的代码组织起来,作为一个整体,哪里需要就在哪里调用,那样会更加方便。函数就实现了这样的功能,它能够将这些代码模块化,使其代码结构更加清晰。
函数是代表一组语句的标识符,它能够实现程序模块化的策略。要完成一个模块化的策略就需要定义一个函数。
/*
* function: 声明自定义函数关键字。
* function_name: 创建函数的名称,是有效的 PHP 标识符。函数名称是唯一的,其命名规则与变量名相同。
* $arg_x: 传递给函数的值。多个参数用逗号隔开,参数类型不必指定。
* code: 函数被调用时执行的代码,要使用大括号括起来。
* return: 将调用的代码需要的值返回,并结束函数的运行。
*/
function function_name($arg_1, $arg_2, ..., $arg_n) {
// 函数要执行的代码
code;
return 返回值;
}
/*
* 当函数被定义好后,所要做的就是调用这个函数。调用函数的操作十分简单,只需要引用函数名并赋予正确的参数即可完成函数的调用。
*/
function_name($para_1, $para_2, ..., $para_n);
$result = function_name;
函数名命名规则
- 1.所有单词都使用小写字母,多个单词使用 _ 来分割。例如:function this_good_idear() { }