PHP 语法
// PHP 教程 //
// //
//////////////////////////////////////
一、PHP 简介
PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")
是一种创建动态交互性站点的强有力的服务器端脚本语言。
【特点】:
1. 免费开源
2. 使用广泛
3. 简单易学
4. 跨平台
【用途】:
常用于Web服务器开发中
【文件】:
.php 的后缀名
1. 可包含在文本、html、Javascript、PHP中
2. 服务器上执行, 返回纯html 给浏览器
【PHP 功能】:
1. PHP 可以生成动态页面内容
2. PHP 可以操作(创建、打开、读取、写入、关闭)服务器上的文件
3. PHP 可以收集表单数据
4. PHP 可以发送和接收 cookies
5. PHP 可以添加、删除、修改您的数据库中的数据
6. PHP 可以限制用户访问您的网站上的一些页面
7. PHP 可以加密数据
二、PHP 基本语法
【基本语法】
1. 基本语义结构:
1) PHP 脚本可以放在文档中的任何位置。
2) PHP 脚本以 结束:
2. PHP 中注释
1) 单行注释
// PHP单行注释掉的代码
2) 多行注释(区块注释)
/* 多行注释掉的代码 */
【变量】
1. PHP 变量规则:
a. 变量以 $ 符号开始,后面跟着变量的名称
b. 变量名必须以字母或者下划线字符开始
c. 变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
d. 变量名不能包含空格
e. 变量名是区分大小写的($y 和 $Y 是两个不同的变量)
2. 创建(声明)变量
例:
3. 作用域 (和C 语言差不多)
a. local
b. global
c. static (静态变量,保留上次的值。仍然是局部变量)
d. parameter
记:
1. 在新定义的一个函数内,在访问一个全局变量时,要在变量前面加上 global 关键字
2. 参数作用域,是在参数传参时,拷贝变量值
【数据类型】
1. String(字符串)
2. Integer(整型)
整型可以用三种格式来指定:十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)
3. Float(浮点型)
4. Boolean(布尔型)
true 和 false
5. Array(数组)
例:
<?php
$cars=array("Volvo","BMW","Toyota");
var_dump($cars);
?>
6. Object(对象)
7. NULL(空值)
【类型比较】
1. ==
值比较
2. ===
完全比较
注:
== 和 === 都比较值的意思,但是后者还比较两者类型。
【数组】
1. 数值数组
//定义 $cars=array("Volvo","BMW","Toyota");
//访问 echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
2. 关联数组
//定义 $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
//访问 echo "Peter is " . $age['Peter'] . " years old.";
【常量】
php可以利用define()定义常量
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
该函数有三个参数:
name:必选参数,常量名称,即标志符。
value:必选参数,常量的值。
case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。
在访问常量时
1. 不需要用$符号
2. 是全局变量域
【超级全局变量】
PHP 超级全局变量列表:
$GLOBALS 是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。
$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组
$_REQUEST 用于收集HTML表单提交的数据
$_POST 用于收集表单数据
$_GET 用于收集表单数据
$_FILES
$_ENV
$_COOKIE
$_SESSION
【魔术常量】
PHP 向它运行的任何脚本提供了大量的预定义常量。
__LINE__ 文件中的当前行号。
__FILE__ 文件的完整路径和文件名
__DIR__ 文件所在的目录
__FUNCTION__ 返回该函数被定义时的名字(区分大小写)
__CLASS__ 返回该类被定义时的名字(区分大小写)
__TRAIT__ 实现了代码复用的一个方法
__METHOD__ 返回该方法被定义时的名字(区分大小写)
__NAMESPACE__ 当前命名空间的名称
【字符串变量】
字符串连接
用 . 将两个字符串连接起来
【基本输出】
1. echo
可输出1个以上的字符串
2. print
只可输出1个字符串
注:
1. echo 执行速度比print快,echo无返回值,print返回值为1
2. echo 和 print 在使用时都能 可加可不加 "()"
3. 在输出的时候可用 "{}" 包裹在内
【运算符】
1. 和C语言 中基本一致。
2. 支持三元运算符
3. 组合比较符 <=>
$c = $a <=> $b;
解析如下:
1)如果 $a > $b, 则 $c 的值为 1。
2)如果 $a == $b, 则 $c 的值为 0。
3)如果 $a < $b, 则 $c 的值为 -1。
三、PHP 控制结构
【条件控制】
1. if
和 C语言用法一样
2. switch
和 C语言用法一样
【循环控制】
1. while循环
2. for循环
【注】
while 和 for 循环均与 C语言用法一致
3. foreach循环
foreach ($array as $value)
{
要执行代码;
}
四、PHP 区块化
【函数】
定义函数
需要在函数名前面 加上function 关键字,其他细节和 C语言用法一致
PHP 函数准则:
1)函数的名称应该提示出它的功能
2)函数名称以字母或下划线开头(不能以数字开头)
【命名空间】
1.声明
namespace + 模块层次1/模块层次2/ ... 等依次类推
2.使用
use + 模块层次 as 别名 这样别名就可以访问该命名空间内定义的类
五、面向对象
【类】
1.定义
和C++ 定义方式差不多。
2. 类中有$this指针变量
3. 创建对象
使用new 创建
例:
$runoob = new Site;
4. 构造函数
function __construct(参数表)
{
执行操作语句;
}
例:
function __construct( $par1, $par2 ) {
$this->url = $par1;
$this->title = $par2;
}
5. 析构函数
function __destruct()
{
执行语句;
}
6. 继承
class 子类名 extends 父类名{
}
7. 访问控制符
可用访问控制符来对属性、方法进行控制 ,在其前加上访问控制符
public:
protected:
private:
8. 接口
interface
声明一个接口
<?php
// 声明一个'iTemplate'接口
interface iTemplate
{
public function setVariable($name, $var);
public function getHtml($template);
}
// 实现接口
class Template implements iTemplate
{
private $vars = array();
public function setVariable($name, $var)
{
$this->vars[$name] = $var;
}
public function getHtml($template)
{
foreach($this->vars as $name => $value) {
$template = str_replace('{' . $name . '}', $value, $template);
}
return $template;
}
}
9.抽象类
abstract class 类名
该类就不能实例化,定义为了抽象类
10. 常量
利用 “const + 变量名” 定义常量
11. static 关键字
1)声明类属性或方法为 static(静态),就可以不实例化类而直接访问。
2)静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。
3)由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。
4)静态属性不可以由对象通过 -> 操作符来访问。
12. final 关键字
1)如果父类中的方法被声明为 final,则子类无法覆盖该方法。
2)如果一个类被声明为 final,则不能被继承。
<?php
class BaseClass {
public function test() {
echo "BaseClass::test() called" . PHP_EOL;
}
final public function moreTesting() {
echo "BaseClass::moreTesting() called" . PHP_EOL;
}
}
class ChildClass extends BaseClass {
public function moreTesting() {
echo "ChildClass::moreTesting() called" . PHP_EOL;
}
}
// 报错信息 Fatal error: Cannot override final method BaseClass::moreTesting()
?>
13. 调用父类构造方法
1)PHP 不会在子类的构造方法中自动的调用父类的构造方法。
2)要执行父类的构造方法,需要在子类的构造方法中调用 parent::__construct() 。
例:
<?php
class BaseClass {
function __construct() {
print "BaseClass 类中构造方法" . PHP_EOL;
}
}
class SubClass extends BaseClass {
function __construct() {
parent::__construct(); // 子类构造方法不能自动调用父类的构造方法
print "SubClass 类中构造方法" . PHP_EOL;
}
}
class OtherSubClass extends BaseClass {
// 继承 BaseClass 的构造方法
}
// 调用 BaseClass 构造方法
$obj = new BaseClass();
// 调用 BaseClass、SubClass 构造方法
$obj = new SubClass();
// 调用 BaseClass 构造方法
$obj = new OtherSubClass();
?>