基础语法
- PHP 脚本以 <?php 开头,以 ?> 结尾。
- PHP 文件的默认文件扩展名是 ".php"。
- PHP 语句以分号结尾(;)。
- 在 PHP 中,所有用户定义的函数、类和关键词(例如 if、else、echo 等等)都对大小写不敏感,所有变量都对大小写敏感。
注释
<?php
// 这是单行注释
# 这也是单行注释
/*
这是多行注释块
它横跨了
多行
*/
?>
变量声明
- 变量以 $ 符号开头,其后是变量的名称
- 变量名称必须以字母或下划线开头
- 变量名称不能以数字开头
- 变量名称只能包含字母数字字符和下划线(A-z、0-9 以及 _)
- 变量名称对大小写敏感($y 与 $Y 是两个不同的变量)
- PHP 有三种不同的变量作用域:local(局部)global(全局)static(静态)
- PHP数据类型:字符串、整数、浮点数、逻辑、数组、对象、NULL
- 超全局变量:$GLOBALS $_SERVER $_REQUEST $_POST $_GET $_FILES $_ENV $_COOKIE $_SESSION
<?php
define("GREETING", "Welcome to W3School.com.cn!"); // 常量定义
$txt="Hello world!"; // 全局作用域
$x=5;
$y=10.5;
$cars=array("Volvo","BMW","SAAB");
function myTest() {
global $x,$y; // 函数内部引用全局变量
$GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y']; // 使用全局变量
$z=10; // 局部作用域
static $m=0; // 函数执行完static声明的变量值会保持
}
?>
字符串
<?php
$str1 = '单引号字符串';
$str2 = "双引号字符串";
$str3 = <<<TEXT
多行文本字符串
TEXT;
echo strlen("Hello world!"); // strlen() 函数返回字符串的长度,以字符计。
echo strpos("Hello world!","world"); //strpos() 函数用于检索字符串内指定的字符或文本。
?>
运算符
运算符 | 名称 | 实例 |
+ |
加法 |
$x + $y |
- |
减法 |
$x - $y |
* |
乘法 |
$x * $y |
/ |
除法 |
$x / $y |
% |
模数 |
$x % $y |
. |
字符串拼接 |
$txt1 = "Hello" $txt2 = $txt1 . " world!" |
== |
等于 |
$x == $y |
=== |
全等(完全相同) |
$x === $y |
!= |
不等于 |
$x != $y |
<>> |
不等于 |
$x <> $y |
!== |
不全等(完全不同) |
$x !== $y |
> |
大于 |
$x > $y |
< |
小于 |
$x < $y |
>= |
大于或等于 |
$x >= $y |
<= |
小于或等于 |
$x <= $y |
and |
与 |
$x and $y |
or |
或 |
$x or $y |
xor |
异或 |
$x xor $y |
&& |
与 |
$x && $y |
|| |
或 |
$x || $y |
! |
非 |
!$x |
流程控制
<?php
// if语句
if (条件) {
条件为 true 时执行的代码;
} elseif (condition) {
条件为 true 时执行的代码;
} else {
条件为 false 时执行的代码;
}
// switch语句
switch (表达式)
{
case 标签1:
表达式的值匹配标签1时执行;
break;
case 标签2:
表达式的值匹配标签2时执行;
break;
default:
表达式没有匹配任何标签时执行;
}
//while 循环
while (条件为真) {
要执行的代码;
}
//do...while 循环
do {
要执行的代码;
} while (条件为真);
//for 循环
for (初始值; 条件为真; 步长) {
要执行的代码;
}
//foreach 循环
foreach ($array as $value) {
要执行的代码;
}
?>
函数
<?php
// 函数声明
function functionName() {
被执行的代码;
}
// 函数参数
function familyName($fname) {
echo "$fname Zhang.
";
}
// 默认参数
function setHeight($minheight=50) {
echo "The height is : $minheight
";
}
//函数返回值
function sum($x,$y) {
$z=$x+$y;
return $z;
}
?>
数组
<?php
//索引数组声明
$cars=array("Volvo","BMW","SAAB");
echo count($cars); // count() 函数用于返回数组的长度(元素数)
echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
//索引数组遍历
$arrlength=count($cars);
for($x=0;$x<$arrlength;$x++) {
echo $cars[$x];
echo "
";
}
//关联数组声明
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
echo "Peter is " . $age['Peter'] . " years old.";
//关联数组遍历
foreach($age as $x=>$x_value) {
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
//数组排序
//sort() - 以升序对数组排序
//rsort() - 以降序对数组排序
//asort() - 根据值,以升序对关联数组进行排序
//ksort() - 根据键,以升序对关联数组进行排序
//arsort() - 根据值,以降序对关联数组进行排序
//krsort() - 根据键,以降序对关联数组进行排序
?>
日期
<?php
//日期函数
//date(format,timestamp)
//d - 表示月里的某天(01-31)
//m - 表示月(01-12)
//Y - 表示年(四位数)
//1 - 表示周里的某天
//h - 带有首位零的 12 小时小时格式
//i - 带有首位零的分钟
//s - 带有首位零的秒(00 -59)
//a - 小写的午前和午后(am 或 pm)
echo "今天是 " . date("Y/m/d") . "
";
echo "现在时间是 " . date("h:i:sa");
//设置时区
date_default_timezone_set("Asia/Shanghai");
//创建日期
mktime(hour,minute,second,month,day,year)
//用字符串来创建日期
$d=strtotime("10:38pm April 15 2015");
echo "创建日期是 " . date("Y-m-d h:i:sa", $d);
$d=strtotime("tomorrow");
echo date("Y-m-d h:i:sa", $d) . "
";
$d=strtotime("next Saturday");
echo date("Y-m-d h:i:sa", $d) . "
";
$d=strtotime("+3 Months");
echo date("Y-m-d h:i:sa", $d) . "
";
?>
文件包含/命名空间
<?php
//文件引用
include 'filename'; //异常时脚本会继续
require 'filename'; //异常时脚本会停止
//定义命名空间
namespace MyProject;
namespace MyProject\Sub\Level; //声明分层次的单个命名空间
//命名空间导入
use My\Full\Classname as Another;
?>
面向对象
<?php
//类定义
class Site {
/* 成员变量 */
var $url;
var $title;
//构造函数
function __construct($par1="",$par2="") {
$this->url = $par1;
$this->title = $par2;
}
//析构函数
function __destruct() {
print "销毁\n";
}
/* 成员函数 */
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;
}
}
//创建对象
$google = new Site;
// 调用成员函数,设置标题和URL
$google->setTitle( "Google 搜索" );
$google->setUrl( 'www.google.com' );
// 调用成员函数,获取标题和URL
$google->getTitle();
$google->getUrl();
//继承
class Child_Site extends Site {
var $category;
const constant = '常量值';
public static $my_static = 'foo'; //类变量
//访问控制
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';
function __construct() {
parent::__construct(); // 子类构造方法不能自动调用父类的构造方法
print "SubClass 类中构造方法" . PHP_EOL;
}
function setCate($par){
$this->category = $par;
}
function getCate(){
echo $this->category . PHP_EOL;
}
//方法重写
function getUrl() {
echo $this->url . PHP_EOL;
return $this->url;
}
function getTitle(){
echo $this->title . PHP_EOL;
return $this->title;
}
// 声明一个公有的方法
public function MyPublic() { }
// 声明一个受保护的方法
protected function MyProtected() { }
// 声明一个私有的方法
private function MyPrivate() { }
}
// 声明一个'iTemplate'接口
interface iTemplate
{
public function setVariable($name, $var);
public function getHtml($template);
}
//抽象类
abstract class AbstractClass
{
// 强制要求子类定义这些方法
abstract protected function getValue();
abstract protected function prefixValue($prefix);
// 普通方法(非抽象方法)
public function printOut() {
print $this->getValue() . PHP_EOL;
}
}
// 实现接口
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;
}
}
?>
文件操作
<?php
//打开文件,模式:r(只读)r+(读/写)w(只写)w+(读/写)a(追加)a+(读/追加)x(只写)x+(读/写)
$file = fopen("welcome.txt", "r") or exit("无法打开文件!");
// 读取文件每一行,直到文件结尾
while(!feof($file))
{
echo fgets($file). "<br>";
}
//逐字符读取文件
while (!feof($file))
{
echo fgetc($file);
}
//关闭文件
fclose($file);
?>