一.PHP中的注释
二.PHP中变量作用域
全局变量
- 全局变量是在函数外部定义的变量,可以在任何地方访问。
局部变量
- 局部变量是在函数内部定义的变量,只能在函数内部访问。
global 关键字
- global 关键字用于在函数内部访问全局变量,变量前加上global为全局变量。
static 关键字
- static 关键字用于在函数内部定义的变量,变量前加上static为静态变量。
1 2 3 4 5 6 7
| function test() { static $count = 0; $count++; echo $count;
}
|
三.PHP中EOF
PHP EOF(heredoc)是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字符串的方法。
- 必须后接分号,否则编译通不过。
- EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致。
- EOF 可以在字符串内部嵌套EOF
- 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
- 开始标识可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号。
1 2 3 4 5 6 7
| <?php echo <<<EOF <h1>第一个标题</h1> <p>第一个段落。</p> EOF;
?>
|
四.PHP中常量
常量的特征
- 不变性: 常量一旦定义,其值不能改变
- 全局作用域: 常量在定义后,可以在整个脚本的任何地方使用,无需使用 global 关键字。
- 数据类型: 常量的值可以是标量数据类型(如布尔值、整数、浮点数、字符串)或数组(PHP 7 及以上版本)。
- 区分大小写: 常量名称默认是区分大小写的。如果需要定义大小写不敏感的常量,可以在 define() 函数的第三个参数设置为 true。
- 常量名不需要加 $ 修饰符。
定义常量
1
| define(’常量名‘, 常量值,true(可选属性,不区分大小写));
|
预定义常量
PHP 提供了一些预定义常量,可以在脚本中直接使用。这些常量通常用于获取 PHP 的配置信息、版本信息等。常见的预定义常量有:
- PHP_VERSION当前 PHP 解析器的版本。
- PHP_OS:服务器的操作系统。
- PHP_INT_MAX:最大的整数值。
- E_ERROR、E_WARNING、E_PARSE 等:错误报告级别。
实例
1 2 3
| echo PHP_VERSION;(当前 PHP 解析器的版本) echo PHP_OS;(输出服务器的操作系统) echo PHP_INT_MAX;(输出最大的整数值)
|
五.字符串
字符串的特征
- 字符串可以包含任意字符,包括空格、制表符、换行符等字符。
实例
1 2
| $str = 'hello world'; echo $str;(输出 hello world)
|
strpos()函数
strpos() 函数用于在字符串内查找一个字符或一段指定的文本。
如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。
1 2 3 4
| <?php echo strpos("Hello world!","world"); ?>
|
运算符
递增/递减运算符
| 运算符 |
名称 |
描述 |
| x++ |
后递增 |
x+1再返回x |
| ++x |
预递增 |
先返回x再+1 |
| x– |
后递减 |
x-1再返回x |
| –x |
预递减 |
先返回x再-1 |
比较运算符
| 运算符 |
名称 |
描述 |
| x===y |
完全等于 |
值和类型都相 |
| x==y |
等于 |
值相等 |
| x!==y |
不绝对等于 |
值或类型不相等 |
| x!=y |
不等于 |
值不相等 |
| x<>y |
不等于 |
值不相等 |
三目运算符
expr1 ? expr2 : expr3
如果 expr1 为 TRUE,则返回 expr2;否则返回 expr3。
实例
1 2 3
| $username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; echo $username;
|
组合比较符
组合比较符也称之为太空船操作符,符号为 <=>。组合比较运算符可以轻松实现两个变量的比较,当然不仅限于数值类数据的比较。
实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?php
echo 1 <=> 1; echo 1 <=> 2; echo 2 <=> 1;
echo 1.5 <=> 1.5; echo 1.5 <=> 2.5; echo 2.5 <=> 1.5;
echo "a" <=> "a"; echo "a" <=> "b"; echo "b" <=> "a"; ?>
|
switch语句
基本结构
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?php switch (expression) { case value1: break; case value2: break; default: } ?>
|
expression 是要被比较的表达式。
case value: 是可能的值,如果 expression 的值等于某个 case 的值,就执行相应的代码块。
break; 用于终止 switch 语句,防止继续执行下一个 case。
default: 是可选的,用于指定当没有匹配的 case 时执行的代码块。
数组的排序函数
sort():对数组进行升序排序。
rsort():对数组进行降序排序。
asort():根据关联数组的值对数组进行升序排序。
arsort():根据关联数组的值对数组进行降序排序。
ksort():根据关联数组的键对数组进行升序排序。
krsort():根据关联数组的键对数组进行降序排序。
PHP的超级全局变量
超级全局变量列表:
$_REQUEST:包含所有请求参数的数组。
$_GET:包含所有 GET 请求参数的数组。
$_POST:包含所有 POST 请求参数的数组。
$_COOKIE:包含所有 COOKIE 请求参数的数组。
$_SESSION:包含所有 SESSION 请求参数的数组。
$_SERVER:包含所有 SERVER 请求参数的数组。
$_SERVER全局变量中的重要元素:
| 元素 |
描述 |
| $_SERVER[‘PHP_SELF’] |
当前脚本的路径 |
| $_SERVER[‘SERVER_NAME’] |
服务器名称 |
| $_SERVER[‘SERVER_PORT’] |
服务器端口 |
| $_SERVER[‘REQUEST_METHOD’] |
请求方法 |
| $_SERVER[‘REQUEST_URI’] |
请求 URI |
| $_SERVER[‘REMOTE_ADDR’] |
客户端 IP 地址 |
| $_SERVER[‘HOST’] |
主机名 |
while语句
基本结构
1 2 3 4 5
| <?php while (条件) { 要执行的代码 } ?>
|
实例
1 2 3 4 5 6 7
| <?php $i = 0; while ($i < 5) { echo $i; $i++; } ?>
|
另一种结构
1 2 3 4 5
| do { 要执行的代码; } while (条件);
|
实例
1 2 3 4 5 6 7 8 9
| <?php $i = 0; do { echo $i; $i++; } while ($i < 5); ?>
|
for语句
基本结构
1 2 3 4 5
| <?php for (初始化; 条件; 增量) { 要执行的代码 } ?>
|
实例
1 2 3 4 5 6
| <?php $i = 0; for ($i = 0; $i < 5; $i++) { echo $i; } ?>
|
foreach循环
foreach循环用于遍历数组。
基本结构
1 2 3 4 5 6 7 8 9
| <?php foreach (array as value){ 要执行的代码 }
foreach (array as key => value) { 要执行的代码 } ?>
|
实例
1 2 3 4 5 6 7
| <?php $x=array(1=>"Google", 2=>"Runoob", 3=>"Taobao"); foreach ($x as $key => $value) { echo "key 为 " . $key . ",对应的 value 为 ". $value . PHP_EOL; } ?>
|
PHP函数中的魔法变量
FILE
__FILE__魔法变量用于获取当前脚本的路径。
LINE
__LINE__魔法变量用于获取当前脚本的行号。
NAMESPACE
__NAMESPACE__魔法变量用于获取当前命名空间。
CLASS
__CLASS__魔法变量用于获取当前类的名称。
METHOD
__METHOD__魔法变量用于获取当前方法的名称。
FUNCTION
__FUNCTION__魔法变量用于获取当前函数的名称。
DIR
__DIR__魔法变量用于获取当前脚本所在目录。
类和面向对象
类的定义格式
1 2 3 4 5 6 7 8 9 10 11
| <?php class phpClass { var $var1; var $var2 = "constant string"; function myfunc ($arg1, $arg2) { [..] } [..] } ?>
|
- 使用 class 关键字后加上类名定义。
- 类名后的一对大括号({})内可以定义变量和方法。
- 类的变量使用 var 来声明, 变量也可以初始化值。
- 函数定义类似 PHP 函数的定义,但函数只能通过该类及其实例化的对象访问。
实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <?php class Site { var $url; var $title; function setUrl($par){ $this->url = $par; } function getUrl(){ echo $this->url . PHP_EOL; } function setTitle($par){ $this->title = $par; } function getTitle(){ echo $this->title . PHP_EOL; } }
?>
|
调用函数
1 2 3 4 5 6 7
| <?php $site = new Site(); $site->setUrl("www.baidu.com"); $site->getUrl(); $site->setTitle("百度"); $site->getTitle(); ?>
|
构造函数
构造函数是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,在创建对象的语句中与 new 运算符一起使用。
实例
1 2 3 4 5 6 7 8
| function __construct( $par1, $par2 ) { $this->url = $par1; $this->title = $par2; } $runoob = new Site('www.runoob.com', '菜鸟教程'); $runoob->getUrl(); $runoob->getTitle();
|
析构函数
析构函数是一种特殊的方法。主要用来在对象被销毁时执行一些清理工作。
析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。
实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?php class MyDestructableClass { function __construct() { print "构造函数\n"; $this->name = "MyDestructableClass"; }
function __destruct() { print "销毁 " . $this->name . "\n"; } }
$obj = new MyDestructableClass(); ?>
|
输出结果:
1 2
| 构造函数 销毁 MyDestructableClass
|
继承
PHP 使用关键字 extends 来继承一个类,PHP 不支持多继承,格式如下:
1 2 3
| class Child extends Parent { }
|
实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <?php
class Child_Site extends Site { var $category;
function setCate($par){ $this->category = $par; } function getCate(){ echo $this->category . PHP_EOL; } }
?>
|
方法重写
如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
1 2 3 4 5 6 7 8 9
| function getUrl() { echo $this->url . PHP_EOL; return $this->url; } function getTitle(){ echo $this->title . PHP_EOL; return $this->title; }
|
方法的访问控制
| 方法 |
访问控制 |
描述 |
| public |
公共 |
所有对象都可以访问 |
| protected |
受保护 |
子类和父类可以访问 |
| private |
私有 |
只有当前类可以访问 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <?php
class MyClass { public $public = 'Public'; protected $protected = 'Protected'; private $private = 'Private';
function printHello() { echo $this->public; echo $this->protected; echo $this->private; } }
$obj = new MyClass(); echo $obj->public; echo $obj->protected; echo $obj->private; $obj->printHello();
?>
|