PHP 基本语法

					
/*
 * demo.php 文件
 */
<!DOCTYPE html>
<html>
  <head>
  
  </head>
  <body>
    <h1>PHP</h1>
    <?php
      echo "Hello PHP!";
     ?>
  </body>
</html>
					
				

PHP 标记

PHP 脚本可以放在 .php 文档中的任何位置。PHP 脚本以 <?php 开始,以 ?> 结束。

PHP 和其他 Web 语言一样,都是使用一对标签(<?php ?>)将 PHP 代码包裹起来,以便和其他 HTML 代码、JavaScript 脚本相区分。

PHP 支持 4 种标记风格。

XML 风格(推荐)

					
<?php
  //PHP 代码
 ?>
					
				

XML 风格是推荐使用的 PHP 标记风格,服务器不能禁止。该风格的标记在 XML、XHTML 中也能使用。

PHP 注释

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>"    
					

程序注释是书写规范程序很重要的一个环节。注释主要针对代码的解释和说明,用来解释脚本的用途、版权说明、版本号、生成日期、作者、内容等,有助于对程序的阅读理解。

合理使用注释注意以下原则:

总之,注释很重要,与程序代码同样重要。

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
 ?>
					

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

常量通常具有如下特性:

预定义常量

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 变量

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

					
/*
 * PHP中的变量用 $ 加变量名来表示。 
 */
$name = value;	
					
				

与其他语言不同,在 PHP 中使用变量之前不需要声明变量(在 PHP4.0 之前需要声明变量),只须为变量赋值即可。PHP 中的变量名称用 $ 和标识符表示,并遵循以下约定:

除了直接赋值外,还有两种方式来给变量声明或赋值:

					
<?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 变量命名规则

变量名除了需要 $ 进行标识外,还有一些规则需要遵守:

可变变量

可变变量是一种独特的变量,它允许动态地改变一个变量的名称。 工作原理是该变量的名称由另外一个变量的值来确定。实现过程是在变量的前面再多加一个 "$"。

					
<?php
  $name1 = "name2";
  $name2 = "wanghao";
  echo $name1;           //输出"name2"
  echo $$name1;          //输出"wanghao"
  $name2 = "hello";
  echo $$name1;          //输出"hello"
 ?>
					
				

PHP 变量作用域

变量在使用时,要符合变量的定义规则。变量必须在有效范围内使用,如果超出有效范围,即超出变量的作用域,变量也就失去其意义了,即变量变得不可用(获取与修改)。

变量的作用域
作用域说明
局部变量即在函数内部定义的的变量,其作用域是所在函数。如果在函数外赋值,将被认为是完全不同的另一个变量。在退出声明变量的函数时,该变量及相应的值就会被清除。
全局变量被定义在所有函数以外的变量,其作用域是整个 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"
  }

 ?>
					
				

说明:

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

PHP 字符串

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

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

PHP 运算符

PHP 数组

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 函数

在 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;
					
				

函数名命名规则