PHP基础

PHP语法

PHP 脚本可以放在文档中的任何位置;
PHP 脚本以 <?php 开始,以 ?> 结束;结束定界符可以省,结束定界符有一个隐含的;
短标记<? PHP代码?>short_open_tag = On
asp<%PHP代码%>asp_tags = On
script<script language='php'>PHP代码</script>
PHP 文件的默认文件扩展名是 “.php”;

PHP中文乱码

echo '<meta charset="utf-8">';
header('content-type:text/html;charset=utf-8');

PHP注释

// 单行注释
/*
多行注释
*/

PHP变量

变量:计算机内存中的一段空间

  • 变量名以 $ 符号开始,后面跟着变量的名称
  • 变量名必须以字母或者下划线字符开始
  • 变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
  • 变量名不能包含空格
  • 变量名是区分大小写的($y 和 $Y 是两个不同的变量,关键字不区分)
  • PHP 会根据变量的值,自动把变量转换为正确的数据类型
    传值新开辟空间$a =$b
    传地址两个变量指向同一个空间 $a = &$b
    unset($a)销毁变量名
    变量的值由垃圾回收机制回收,没有变量引用的值
    全局变量页面执行后销毁,局部变量函数结束后销毁
    static静态变量作用域不变,函数内,生命周期变,页面执行完毕后销毁

超全局变量

$_GET
$_POST
$_REQUEST(保存get和post的值,默认post会覆盖get,request_order)

可变变量

$a = 5
$b = a
$$b

不通过Apache执行php页面
php.exe 文件路径\文件
$_GET和$_POST获取http提交的参数,不能获取命令行提交的参数,$argv获取命令行传递的参数,$argc获取参数数量

常量

在脚本执行周期内不变,没有$
自定义

define('NAME','wang',true);true不区分大小写,默认区分
const NAME='wang'

已经定义的常量不可再次定义
defined(‘常量名称’)判断常量是否定义

预定义
PHP_OS魔术常量
__LINE__行号
__FILE__文件路径及名称
__DIR__文件路径
__FUNCTION__方法名
__CLASS__类名

print echo heredoc

print

语言结构,可以加括号print(),可以不加括号print
只允许输出一个字符串,返回值总为1

echo

语言结构,可以加括号echo(),可以不加括号echo,加括号只能输出一个参数
可以输出一个或多个字符串
输出速度比print快
echo false;为空
echo true;为1

heredoc

为输出大量的文本提供了方法

<?php
echo <<<EOF
    <h1>我的第一个标题</h1>
    <p>我的第一个段落。</p>
EOF;
?>
  • 必须后接分号,否则编译通不过
  • EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致
  • 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)
  • 开始标识可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号
  • 当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义,此处相当与q和qq的用法
    注意
  • 以 <<<EOF 开始标记开始,以 EOF 结束标记结束,结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号
  • 开始标记和结束标记相同,比如常用大写的 EOT、EOD、EOF 来表示,但是不只限于那几个(也可以用:JSON、HTML等),只要保证开始标记和结束标记不在正文中出现即可
  • 位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。在 heredoc 中,变量不需要用连接符 . 或 , 来拼接

数据类型(数据在内存中的存储结构)

强数据类型:声明为A类型便不能存放B类型的数据
弱数据类型:变量类型取决于放值得数据类型(PHP,JS)
标量类型

  • String(字符串)单引号和双引号,双引号内的变量会解析,单引号真正的字符串,双引号要运算,所以单引号运算效率高,$后连续的字符串都会解析为变量名称,{}和$在一起会解析变量;转义字符\,将特殊字符转为普通字符,将普通字符转为特殊字符,\r回车,放到当前行的最前面\n换行,下一行\t制表符
  • Integer(整型)没有小数的数字,四个字节,32位,-2^31 ^31-1
  • Float(浮点型)带小数部分的数字,或是指数形式,也叫单精度,乘2正向取整有可能一直循环下去,保存的是近似值,不能用浮点数作比较,如果比较必须使用特殊函数比较bccomp,在C++中双精度的范围比单精度小,PHP中一样,范围比整形大,有效精度14位,1.8*E^308
  • Boolean(布尔型)TRUE 或 FALSE
进制转换

整数:除2反向取余
小数:乘2正向取整
在这里插入图片描述
0.01
在这里插入图片描述
decoct十进制转八进制,以此类推,PHP变量能存十,八(以0开头),十六(以0x开头)进制

  • Array(数组)一个变量中存储多个值,索引数组、关联数组
    在这里插入图片描述
    在这里插入图片描述
  • Object(对象)必须使用class关键字声明类对象。类是可以包含属性和方法的结构
  • NULL(空值)NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值
  • 资源型,PHP特有的引用的外部资源,只能获取不能创建,资源有类别

类型转换

  • 自动转换
  • 强制转换(数据类型)变量
    数字0为假非0为真
    字符串非0非空为true,0或空为false

ASCII码

连续
小写大于大写
相差32
A=65,a=97
ord,chr

常量

  • 常量是一个简单值的标识符。该值在脚本中不能改变
  • 一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)
  • 常量是全局的
  • bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )

字符串string

  • 并置运算符(.)
  • strlen()函数返回字符串的长度
  • strpos() 函数用于在字符串内查找一个字符或一段指定的文本,如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE

运算符

运算符的优先级口诀:括(号)、单(操作数)、算(术)、移(位)、关(系)(>,>=,<,<=,,!=,===);位(运算符)、逻(辑)(&&,||,!)、条(件)、赋(值)、逗(号)

递增/递减运算符

  • ++ x 预递增 x 加 1,然后返回 x
  • x ++ 后递增 返回 x,然后 x 加 1
  • – x 预递减 x 减 1,然后返回 x
  • x – 后递减 返回 x,然后 x 减 1

算术运算符

加+,减-,乘*,除/,模(除法的余数)%, 取反-,并置(连接两个字符串).

赋值运算法

=,+=,-=,*= ,/= ,%=,.=

比较运算符(关系运算符)

  • x == y 等于 如果 x 等于 y
  • x === y 绝对等于 如果 x 等于 y,且它们类型相同,则返回 true
  • x != y 不等于 如果 x 不等于 y,则返回 true 5!=8 返回 true
  • x <> y 不等于 如果 x 不等于 y,则返回 true 5<>8 返回 true
  • x !== y 绝对不等于 如果 x 不等于 y,或它们类型不相同,则返回 true
  • x > y 大于 如果 x 大于 y,则返回 true
  • x < y 小于 如果 x 小于 y,则返回 true
  • x >= y 大于等于 如果 x 大于或者等于 y,则返回 true
  • x <= y 小于等于 如果 x 小于或者等于 y,则返回 true

逻辑运算符

  • x and y 与 如果 x 和 y 都为 true
  • x or y 或 如果 x 和 y 至少有一个为 true,则返回 true
  • x xor y 异或 如果 x 和 y 有且仅有一个为 true,则返回 true
  • x && y 与 如果 x 和 y 都为 true,则返回 true
  • x || y 或 如果 x 和 y 至少有一个为 true,则返回 true
  • ! x 非 如果 x 不为 true,则返回 true

数组运算符

  • x + y 集合 x 和 y 的集合
  • x == y 相等 如果 x 和 y 具有相同的键/值对,则返回 true
  • x === y 恒等 如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true
  • x != y 不相等 如果 x 不等于 y,则返回 true
  • x <> y 不相等 如果 x 不等于 y,则返回 true
  • x !== y 不恒等 如果 x 不等于 y,则返回 true

组合比较符

$c = $a <=> $b;
  • 如果 $a > $b, 则 $c 的值为 1
  • 如果 $a == $b, 则 $c 的值为 0
  • 如果 $a < $b, 则 $c 的值为 -1

条件语句

if (条件)
{
    条件成立时要执行的代码;
}
if (条件)
{
条件成立时执行的代码;
}
else
{
条件不成立时执行的代码;
}
if (条件)
{
    if 条件成立时执行的代码;
}
elseif (条件)
{
    elseif 条件成立时执行的代码;
}
else
{
    条件不成立时执行的代码;
}
switch (n)
{
case label1:
    如果 n=label1,此处代码将执行;
    break;
case label2:
    如果 n=label2,此处代码将执行;
    break;
default:
    如果 n 既不等于 label1 也不等于 label2,此处代码将执行;
}

continue跳出当前循环

数组

数组是一个能在单个变量中存储多个值的特殊变量

  • 数值数组 - 带有数字 ID 键的数组
  • 关联数组 - 带有指定的键的数组,每个键关联一个值
  • 多维数组 - 包含一个或多个数组的数组

sort() - 对数组进行升序排列
rsort() - 对数组进行降序排列
asort() - 根据关联数组的值,对数组进行升序排列
ksort() - 根据关联数组的键,对数组进行升序排列
arsort() - 根据关联数组的值,对数组进行降序排列
krsort() - 根据关联数组的键,对数组进行降序排列

循环

循环执行代码块指定的次数,或者当指定的条件为真时循环执行代码块。

while (条件)
{
    要执行的代码;
}
do
{
    要执行的代码;
}
while (条件);

for 循环用于您预先知道脚本需要运行的次数的情况
只能遍历索引数组

for (初始值; 条件; 增量)
{
    要执行的代码;
}

遍历索引数组和关联数组
每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值

foreach ($array as $value)
{
    要执行代码;
}

函数

  • 地址传递和值传递
  • 不能是变量可以是常量
  • 默认参数在后面
  • return退出函数,返回值

面向对象

面向对象和面向过程的去别

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为

  • − 定义了一件事物的抽象特点。类的定义包含了数据的形式以及对数据的操作。

  • 对象 − 是类的实例。

  • 成员变量 − 定义在类内部的变量。该变量的值对外是不可见的,但是可以通过成员函数访问,在类被实例化为对象后,该变量即可称为对象的属性。

  • 成员函数 − 定义在类的内部,可用于访问对象的数据。

  • 继承 − 继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。

  • 父类 − 一个类被其他类继承,可将该类称为父类,或基类,或超类。

  • 子类 − 一个类继承其他类称为子类,也可称为派生类。

  • 多态 − 多态性是指相同的函数或方法可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。

  • 重载 − 简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。

  • 抽象性 − 抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。

  • 封装 − 封装是指将现实世界中存在的某个客体的属性与行为绑定在一起,并放置在一个逻辑单元内。

  • 构造函数 − 主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中__construct 。

  • 析构函数 − 析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做"清理善后" 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)__destruct。

  • 方法重写 − 如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写

访问控制

  • public(公有):公有的类成员可以在任何地方被访问。
  • protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。
  • private(私有):私有的类成员则只能被其定义所在的类访问。

接口

  • 使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。
  • 接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
  • 接口中定义的所有方法都必须是公有,这是接口的特性。
  • 要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。
// 声明一个'iTemplate'接口
interface iTemplate
{
    public function setVariable($name, $var);
    public function getHtml($template);
}


// 实现接口
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;
    }
}

抽象类

  • 任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。
  • 定义为抽象的类不能被实例化。
  • 被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。
  • 继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。
  • 子类方法可以包含父类抽象方法中不存在的可选参数
abstract class AbstractClass
{
 // 强制要求子类定义这些方法
    abstract protected function getValue();
    abstract protected function prefixValue($prefix);

    // 普通方法(非抽象方法)
    public function printOut() {
        print $this->getValue() . PHP_EOL;
    }
}

class ConcreteClass1 extends AbstractClass
{
    protected function getValue() {
        return "ConcreteClass1";
    }

    public function prefixValue($prefix) {
        return "{$prefix}ConcreteClass1";
    }
}

Static 关键字

  • 声明类属性或方法为 static(静态),就可以不实例化类而直接访问
  • 静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)
  • 由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用
  • 静态属性不可以由对象通过 -> 操作符来访问

Final 关键字

  • 如果父类中的方法被声明为 final,则子类无法覆盖该方法
  • 如果一个类被声明为 final,则不能被继承

调用父类构造方法

PHP 不会在子类的构造方法中自动的调用父类的构造方法。要执行父类的构造方法,需要在子类的构造方法中调用 parent::__construct()

异常处理

// 创建一个有异常处理的函数
function checkNum($number)
{
    if($number>1)
    {
        throw new Exception("变量值必须小于等于 1");
    }
        return true;
}
    
// 在 try 块 触发异常
try
{
    checkNum(2);
    // 如果抛出异常,以下文本不会输出
    echo '如果输出该内容,说明 $number 变量';
}
// 捕获异常
catch(Exception $e)
{
    echo 'Message: ' .$e->getMessage();
}```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值