IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> php随手记 -> 正文阅读

[PHP知识库]php随手记

1、语言发展

  • 机器语言

    组成:0,1组成的命令
    优点:执行效率高
    缺点:开发难度大、移植性差、开发成本高

  • 汇编语言
    组成:简洁的英文字母和符号
    优点:指令简单明了、推广性高
    缺点:移植性差、功能简单

  • 高级计算机语言
    组成:类似自然语言的符号,系统对程序代码进行编译执
    ? 行,高级语言编程思想分为 面向过程面向对象
    优点:移植性强、可读性强、推广性非常高
    缺点:执行效率低
    ?

2、编程思想

  • 面向过程编程

? 拆分封装函数实现代码复用,节省开发升本。按照既定方式执行到底,不够灵活

  • 面向对象编程(Object Oriented Programming)

? 建立在面向过程基础上,面向对象解决的本质是主体来实现操作,任何动作的执行均属于对象

?

3、面向对象基础

面向对象中,关键结构包含以下几类

  1. 类 class

  2. 对象 object

  3. 实例化 new

  4. 类成员 member

    • 方法 method

    • 属性 property

    • 类成员 constant

4、常见盲点

  1. 对象传递是传引用,共用内存地址
  2. 范围解析操作符 ‘::’ 访问类常量 如 cls::PI
  3. 静态属性不属于类普通属性,无法通过cls->$name方式获取,无需通过实例化对象访问
  4. public修饰方法不建议通过“cls::name”调用,虽然可运行,不一定报错,但不建议
  5. static 修饰方法可以通过普通方式调用"cls->$name" 但不推荐,且内部不允许使用$this,可以用self替代类
  6. __autoload()php<7.0之前为自动加载文件机制,php7以后推荐函数+sp_autoload_register()方式实现注册加载文件
  7. 克隆出来的对象为不同对象,被克隆出来的对象会调用__clone()方法,将__clone()方法私有化则禁止克隆
  8. 子类继承父类公有成员(含常量)、受保护成员及私有属性,但不继承私有方法
  9. 子类重写父类会覆盖父类相应方法或属性public 、protected 属性均可重写覆盖,子类继承父类的控制权限不能大于父类,如 父类private 子类可改为private/protected/public中任一
  10. PHP7 中要求被重写方法必须与父类参数保持一致
  11. foreach可以遍历对象,但访问的是公有属性

5、单例模式

单例模式目的是保护资源的唯一性,单例模式设计规范“三私一公” 【私有构造化方法、私有克隆方法、私有静态属性、公有静态方法】

class Singleton
{
    //创建静态私有的变量保存该类对象
    private static $instance;
    //防止使用new直接创建对象
    private function __construct(){}
    //防止使用clone克隆对象
    private function __clone(){}
	// 静态入口方法
    public static function getInstance()
    {
        //判断$instance是否是Singleton的对象
        if (!self::$instance instanceof self) {
            self::$instance = new self();
        }
        return self::$instance;
    }
    public function test()
    {
        echo "我是一个单例模式";
    }
}

6、工厂模式

<?php

class Man {}

class Woman {}

// 普通工厂
class Factory
{
    public  function getInstance($clsName){
        return new $clsName();
    }
    
}

// 静态工厂
class StaticFactory
{
  
    public static function getInstance($clsName){
        return new $clsName();
    }
    
}

// 匿名工厂
class Factory3
{
    public static function getInstance($flag){
        switch ($flag) {
            case 'm':
                $clsName = 'Man';
                break;
            default:
                  $clsName = 'Woman';
                // code...
                break;
        }
        return new $clsName();
    }
    
}

// 普通工厂
$fac = new Factory();
$m = $fac->getInstance('Man');
$n = $fac->getInstance('Woman');

// 静态工厂
$m = StaticFactory::getInstance('Man');
$n = StaticFactory::getInstance('Woman');
// 匿名工厂
$m = Factory3::getInstance('m');
$n = Factory3::getInstance('n');
?>

7、面向对象三大特性

  1. 封装
  2. 继承
  3. 多态
    • 多态必须有继承关系,并且子类重写父类方法
    • 多态是指父类对象拥有子类形态,并可以表现子类特性
    • php是弱语言,不支持多态

8、静态延迟绑定

静态延迟绑定【关键字 static】对比的是self 方式,子类访问才生效

<?php

class Human {
    public static $name = "humam";
    
    public static function getName(){
        // 当前类
        echo self::$name.'<br/>';
        // 谁调用类时决定
        echo static::$name.'<br/>';
    }
}

class Man extends Human {
    public static $name = "Man";
}
Man::getName();

执行结果

$> php scratch.php
humam<br/>
Man<br/>

9、final 修饰类或方法

final 修饰的类或者方法都不能被重写或继承

<?php

final class Human {}

子类来继承用final修饰的类会报错
// class Man extends Human {}

10、abstract 修饰类或者方法

抽象类不能被实例化,只能被继承;

抽象方法在继承时必须实现该抽象方法;

抽象类目的是用于规范子类

<?php

abstract class Human {
    abstract public function test (){}
}

// 实例化会出错
// $h = new Human();

// 继承抽象类,带有抽象方法也必须实现
class Man extneds Human {
    public function test (){
        echo "this is test";
    }
}

11、interface 接口类

接口主要用于规范子类,且接口不能被实例化;

接口成员只能包含空方法和常量成员,允许抽象方法存在

抽象类也可以实现接口,接口可以多继承

<?php 

interface Human {
	const NAME = "人"
    public function walk();  
}
interface Animal {
    public function eat();  
}

// 单继承
interface Man extends Human {}

// 多继承
interface Dog extends Human, Animal {}

// 实现接口
[abstract] class Woman implements Human {
    public function walk(){
        echo '走';
    }
}

12、trait 代码复用

trait定义一些共用的方法, 不能被实例化,不能有常量,在类中通过use方式引用,类中可以多个引用trait;类属性不允许与trait中重名,类方法与trait重名会覆盖;同名时优先级 :自身类> trait > 父类; trait 可以使用抽象方法

<?php
trait Traits {
    public $name;
    protected $age; // 允许定义,通常不使用
    private $money; // 允许定义,通常不使用
    // const PI 3.14; 不能有常量
    public static function test(){
        echo 'trait test';
    }
}
trait Traits1 {
    public static function test(){
        echo 'trait test';
    }
}
class Human {
   // use Traits, Traits1; // 引用多个复用类包含同方法名会冲突
    // 解决冲突方式
    // 方式 1  取其中一个复用类
//    use Traits, Traits1{
//        Traits::test insteadof Traits1;
//    }
    // 方式 2  取其中一个复用类,并给另一个复用类方法取别名
    use Traits, Traits1{
        Traits::test insteadof Traits1;
        Traits1::test as [public/protected/private] test1;
    }
}
Human::test();
Human::test1();

13、重载overload(容错机制)

为了保护程序正确运行而提供的容错机制

常见容错机制使用的魔术方法

  1. __get()/__set() 获取属性
  2. __isset()/ __unset() 调用属性
  3. __call() 调用未定义方法
  4. __autoload使用未被定义的类时调用
  5. __construct()__destruct() 创建和销毁
  6. __clone() 克隆
  7. __toString() 将对象转为字符串
  8. __sleep()/__wakeup 串行和反串行 结合serialize/unserialize检查使用
  9. __set_state 调用var_export()触发
  10. __callStatic 类似__call() 用于处理静态方法
  11. __invoke尝试以调用函数方式调用对象时触发
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-01-08 13:45:21  更:2022-01-08 13:45:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 14:55:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码