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(字符串)

四种复合类型:

  • array(数组)
  • object(对象)
  • callable(可调用)
  • iterable(可迭代)

最后是两种特殊类型:

  • 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的引用,类似于指针

原文地址:http://www.cnblogs.com/CoLo/p/16786619.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性