原站地址:http://www.runoob.com/php/php-intro.html
本文目的: 精简方式记录最重要的知识点,方便快速复习
一、语法
1. PHP 脚本以 <?php 开始,以 ?> 结束
<?php
// PHP 代码
?>
2. 每个代码行都必须以分号结束
3. 有两种在浏览器输出文本的基础指令:echo 和 print。
二、变量
1. 变量以 $ 符号开始,后面跟着变量的名称
2. 变量名是区分大小写的
3. PHP 是弱类型语言,不必声明变量的数据类型, 它会根据变量的值,自动转换为正确的数据类型。
4. 在函数内部访问全局变量,要加global
$x=5;
function myTest()
{
global $x;
}
或者使用$GLOBALS
$y=10;
function myTest()
{
$GLOBALS['y'];
}
5. php也有静态变量关键字: static
三、 EOF:更方便地输出多行文本
<?php
echo <<<EOF
<h1>我的第一个标题</h1>
<p>我的第一个段落。</p>
EOF;
// 结束需要独立一行且前后不能空格
?>
四、数据类型
1. 整型的三种进制:十进制, 十六进制( 以 0x 为前缀:0x8C)或 八进制(前缀为 0:047)
2. NULL、TRUE、FALSE不区分大小写
3. var_dump 可以输出数据类型和内容,比echo和print更强大
4. 对象里面的关键字this, 就是指向当前对象实例的指针
五、常量
1. 定义一个常量(常量名不需要加 $ 修饰符):
define("GREETING", "欢迎访问 Runoob.com");
echo GREETING; // 输出 "欢迎访问 Runoob.com"
六、字符串
1. 字符串可以用 . 符号链接起来: echo $txt1 . " " . $txt2;
2. 计算字符串长度: strlen("Hello world!");
3. 字符串内查找:echo strpos("Hello world!","world");
返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。
七、运算符
1. php 有递增/递减运算符 ++ 和 -- 。
++ x 预递增, x ++ 后递增, -- x 预递减, x -- 后递减
2. 等于: == , 绝对等于:=== (数值相同且类型不同)
不等于: != 或者 <> , 绝对不等于: !== (数值不同或类型不同)
3. 逻辑运算符: and 或 &&, or 或 || ,异或 xor , 非 !x
4. 三元运算符: (expr1) ? (expr2) : (expr3)
5. 组合比较符(PHP7才支持)
$c = $a <=> $b;
如果 $a > $b, 则 $c 的值为 1; 如果 $a == $b, 则 $c 的值为 0; 如果 $a < $b, 则 $c 的值为 -1。
6. or 和 ||,&& 和 and 都是逻辑运算符,效果一样,但是其优先级却不一样。 ||,&& 优先级更高
八、If...Else 语句:
if (条件){
if 条件成立时执行的代码;
}
elseif (条件){
elseif 条件成立时执行的代码;
}
else{
条件不成立时执行的代码;
}
九、If...Else 语句:
switch (n) {
case label1:
如果 n=label1,此处代码将执行;
break;
case label2:
如果 n=label2,此处代码将执行;
break;
default:
如果 n 既不等于 label1 也不等于 label2,此处代码将执行;
}
十、数组
1. 三种类型的数组:
1.1 数值数组 - 数字 ID 键
1.2 关联数组 - 就是c++的map
1.3 多维数组
2. 数值数组:
2.1 自动分配 ID 键(ID 键总是从 0 开始): $cars=array("Volvo","BMW","Toyota");
2.2 人工分配 ID 键: $cars[0]="Volvo"; $cars[1]="BMW"; $cars[2]="Toyota"; (不需要事先声明长度)
2.3 获取数组的长度: count($cars)
2.4 遍历数值数组:
$arrlength=count($cars);
for($x=0; $x<$arrlength; $x++){
......
}
3. 关联数组:
3.1 定义方式一:$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
3.2 定义方式二: $age['Peter']="35"; $age['Ben']="37"; $age['Joe']="43";
3.3 遍历关联数组:
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
foreach($age as $x=>$x_value){ //$x是key,$x_value是值
......
}
十一、数组排序函数
1. sort() 还有其他排序函数,可以支持逆序排序、根据键排序、根据值排序
十二、超级全局变量
1. $_SERVER['PHP_SELF'] :当前执行脚本的文件名
2. $_SERVER['SERVER_ADDR']:当前运行脚本所在的服务器的 IP 地址。
3. $_SERVER['SERVER_NAME']:当前运行脚本所在的服务器的主机名
4. $_SERVER['REQUEST_METHOD']:访问页面使用的请求方法;例如,"GET", "HEAD","POST","PUT"。
5. $_SERVER['REMOTE_ADDR']:浏览当前页面的用户的 IP 地址
6. $_SERVER['REMOTE_PORT']:用户机器上连接到 Web 服务器所使用的端口号
7. $_SERVER['SCRIPT_FILENAME']:当前执行脚本的绝对路径。
8. $_SERVER['SERVER_PORT']:Web 服务器使用的端口。
9. $_SERVER['SCRIPT_NAME']:包含当前脚本的路径
10. $_REQUEST:收集表单中的 input 字段数据
11. $_POST:method="post"时,收集表单中的 input 字段数据
12. $_GET:method="get"时,收集表单中的 input 字段数据
十二、While 循环
while (条件) {
要执行的代码;
}
do {
要执行的代码;
}
while (条件);
十三、For 循环
for (初始值; 条件; 增量){
要执行的代码;
}
//$array: 数组
//$value:遍历过程中获得的值
foreach ($array as $value){
要执行代码;
}
十四、魔术常量
1. __LINE__:当前行号
2. __FILE__:完整路径和文件名
3. __DIR__:文件所在的目录
4. __FUNCTION__ 和 __METHOD__:该函数被定义时的名字
5. __CLASS__:该类被定义时的名字
6. __NAMESPACE__:命名空间的名称
7. __TRAIT__: 代码复用的一个方法,功能和C++的inline一样
十五、命名空间
1. 定义命名空间: namespace MyProject;
2. 定义多层命名空间: namespace Foo\Bar\subnamespace;
3. 别名/导入:
namespace foo;
use My\Full\Classname as Another;
$obj = new namespace\Another; // 实例化 foo\Another 对象
$obj = new Another; // 实例化 My\Full\Classname 对象
十六、面向对象
1. 类定义: (注意:变量使用 var 来声明)
class phpClass {
var $var1 = "constant string";
function myfunc ($arg1, $arg2) {
[..]
}
}
2. 构造函数 和 析构函数
class MyDestructableClass {
function __construct() { //构造函数
$this->name = "MyDestructableClass"; //注意这里使用 this
}
function __destruct() { //析构函数
print "销毁 " . $this->name . "\n";
}
}
$obj = new MyDestructableClass(); //使用new 和 ()
3. 继承:使用 extends
class Child extends Parent {
// 代码部分
}
4. 访问控制:public,protected,private
class MyClass{
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';
}
5. 接口:通过 interface 和 implements 关键字来定义, 类必须实现接口中定义的所有方法,否则会报一个致命错误。
interface iTemplate{
public function setVariable($name, $var);
}
class Template implements iTemplate{
public function setVariable($name, $var){
[......]
}
}
6. 常量:
class MyClass{
const constant = '常量值';
}
echo MyClass::constant; //输出常量值
7. 抽象类:使用 abstract 关键字
abstract class AbstractClass{
// 强制要求子类定义这些方法
abstract protected function getValue();
}
class ConcreteClass1 extends AbstractClass{
protected function getValue() {
return "ConcreteClass1";
}
}
8. Static 关键字:可以不实例化类而直接访问
class Foo {
public static $my_static = 'foo';
}
Foo::$my_static = 'abc'; //修改
print Foo::$my_static; //使用
9. Final 关键字: 父类中的方法被声明为 final,则子类无法覆盖该方法。
class BaseClass {
final public function moreTesting() {
[....]
}
}
class ChildClass extends BaseClass {
public function moreTesting() {
[....]
}
}
// 报错信息 Fatal error: Cannot override final method BaseClass::moreTesting()
10. 调用父类构造方法:调用 parent::xxxxxxx()
class BaseClass {
function __construct() {
[......]
}
}
class SubClass extends BaseClass {
function __construct() {
parent::__construct(); //调用父类的构造方法
[......]
}
}