PHP基础
PHP基础
写在前面
简单过一下php的基础语法,记录下与其他语言不同的地方,相同的就直接略过了。
PHP标记风格
<?php 代码 ?>
官方推荐风格
<? 代码 ?>
短标记风格,需配置文件php.ini中开启short+open_tag
<% 代码 %>
ASP风格,需配置文件php.ini中开启asp_tags
<script language=”php”> 代码 </script>
JavaScript标记的风格,这种风格在任何情况下都可以使用。
变量
变量声明
变量类型
PHP 支持 10 种原始数据类型。
四种标量类型:
- bool(布尔型)
- int(整型)
- float(浮点型)
- string(字符串)
四种复合类型:
最后是两种特殊类型:
- resource(资源)
- NULL(无类型)
如果想查看某个表达式的值和类型,用 var_dump()
函数。
单引号
定义一个字符串的最简单的方法是用单引号把它包围起来(字符 '
)。
要表达一个单引号自身,需在它的前面加个反斜线(\
)来转义。要表达一个反斜线自身,则用两个反斜线(\\
)。其它任何方式的反斜线都会被当成反斜线本身:也就是说如果想使用其它转义序列例如 \r
或者 \n
,并不代表任何特殊含义,就单纯是这两个字符本身。
// 可以录入多行
echo 'You can also have embedded newlines in
strings this way as it is
okay to do';
// 输出: You deleted C:\*.*?
echo 'You deleted C:\\*.*?';
// 输出: You deleted C:\*.*?
echo 'You deleted C:\*.*?';
双引号
如果字符串是包围在双引号(")中, PHP 将对以下特殊的字符进行解析:
序列 | 含义 |
---|---|
\n |
换行(ASCII 字符集中的 LF 或 0x0A (10)) |
\r |
回车(ASCII 字符集中的 CR 或 0x0D (13)) |
\t |
水平制表符(ASCII 字符集中的 HT 或 0x09 (9)) |
\v |
垂直制表符(ASCII 字符集中的 VT 或 0x0B (11)) |
\e |
Escape(ASCII 字符集中的 ESC 或 0x1B (27)) |
\f |
换页(ASCII 字符集中的 FF 或 0x0C (12)) |
\\ |
反斜线 |
\$ |
美元标记 |
\" |
双引号 |
\[0-7]{1,3} |
符合该正则表达式序列的是一个以八进制方式来表达的字符,which silently overflows to fit in a byte (e.g. "\400" === "\000") |
\x[0-9A-Fa-f]{1,2} |
符合该正则表达式序列的是一个以十六进制方式来表达的字符 |
\u{[0-9A-Fa-f]+} |
匹配正则表达式的字符序列是 unicode 码位, 该码位能作为 UTF-8 的表达方式输出字符串 |
例如
<?php
echo "Hello World! \n Hello World!";
?>
//输出
Hello World!
Hello World!
数组
可以用 array() 语言结构来新建一个数组array。它接受任意数量用逗号分隔的 键(key) => 值(value)
对。可以用短数组语法 []
替代 array()
。
<?php
$array = array(
"foo" => "bar",
"bar" => "foo",
);
// 使用短数组语法
$array = [
"foo" => "bar",
"bar" => "foo",
];
?>
数组操作符
implode()和explode()
implode
explode
全局变量
自定义常量
boolean define(string name,mixed value[, bool case_insensitive])
当case_insensitive为true时,常量名不区分大小写
面向对象
魔术方法
__wakeup() //使用unserialize时触发
__sleep() //使用serialize时触发
__destruct() //对象被销毁时触发
__call() //在对象上下文中调用不可访问的方法时触发
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get() //用于从不可访问的属性读取数据
__set() //用于将数据写入不可访问的属性
__isset() //在不可访问的属性上调用isset()或empty()触发
__unset() //在不可访问的属性上使用unset()时触发
__toString() //把类当作字符串使用时触发,file_exists()判断也会触发
__invoke() //当脚本尝试将对象调用为函数时触发
构造函数 __construct
,类实例化时调用,构造函数可以有参数
这狗函数__destruct
,对象被销毁时调用,不可以有参数
parent关键字:使用parent::
关键字访问父类
其他魔术方法
__clone
方法会重写clone,当使用clone时,不仅会复制变量,还会执行__clone
里面的代码
__autoload()
方法会在第一次引用一个类时调用该方法,可以通过定义这个函数来启用类的自动加载
__get/ __set
用于处理类内未定义的属性或者处理私有属性
__call
调用流程如下:
$this->a() ==> 当前类a方法 ==> 父类a方法 ==> 当前类__call方法 ==> 父类__call方法
如果触发__call
方法,那么a,即方法名,会作为__call
的方法的第一个参数,而参数列表会作为__call
的方法第二个参数。
来看到代码
function __destruct(){
$this->a->b();
}
其他
-> 符号用来调用某个对象中的属性或方法,如$this->name $this->setName()
@ 可以屏蔽错误信息,如常见的@eval
const 定义类属性
&$tmp 指向$tmp的引用,类似于指针