• php面向对象


    面向对象

    (1)
    class Person{
    public $name='zhang';//添加成员
    public function fn(){//添加方法
    echo 111;
    }
    const txt="hello";//添加常量
    }
    $p=new Person;
    echo $p->name;//这个是访问属性
    echo $p->name=456;//这个是赋值
    echo $p->fn();//这个是访问方法
    echo Person::txt;//访问常量
    (2)
    class Person{
    public $name="zhang";
    public function fn(){
    echo 111;
    }
    const txt="hello";
    }
    $p=new Person;
    echo $p->name;
    echo $p->name=456;
    $p->fn();
    echo Person::txt;
    (3)变量a和变量p都指向同一个引用地址,二者是同一个对象 ,一遍都变思考:如果让二者是两个不同的对象,改变a但是p不跟
    着改变。需要使用对象克隆 clone
    class Person{
    public function fn(){
    // public $name=123;
    // echo $this->name;
    // var _dump($this);
    }
    }
    $p=new Person;
    $p=new Person;
    $p->fn();//$thjis指向调用他的那个对象
    $a=$p;
    $a->name=456;
    echo $p->name;

    变量a和变量p都指向同一个引用地址,二者是同一个对象 ,一遍都变思考:如果让二者是两个不同的对象,改变a但是p不跟
    着改变。需要使用对象克隆 clone
    通过关键字 clone来赋值一个一模一样的对象

    <!--使用关键字class定义类和new实力恶化对象-->
    <!--类成员的添加和访问-->
    <!--类成员 。。有属性 方法 常量-->
    <!--添加属性 需要使用范围修饰符 public 所有protected内类子类 private类本身-->
    <!--访问属性的时候变量名不带$符号-->
    <!--作用范围 类外 类内 子类 public 都可以访问-->
    <!--protected在类内和子类内访问-->
    <!--private只能在自己的类内访问-->
    abstract class p{
    public $age;
    abstract public function ff($na);
    abstract public function fn();
    }
    class son extends p{
    public function ff($na){
    echo $na;

    }
    public function fn(){

    }
    }
    $pp=new son;
    $pp->ff(23);
    interface pp{
    public function ff(){

    }
    }
    class ss implements pp{
    public function ff(){

    }
    }
    ?>
    面向对象
    1.使用关键字class定义类和new实列化对象
    2.类成员的添加和访问
    类成员 。。有属性 方法 常量
    添加属性 需要使用范围修饰符 【public 所有 protected内类子类 private类本身】
    访问属性的时候变量名不带$符号
    作用范围 类外 类内 子类 public 都可以访问
    protected在类内和子类内访问
    private只能在自己的类内访问
    添加方法 如果方法前不带修饰符 则默认是 public
    添加常量 使用关键字const常量名。 常量名不带$符号
    访问常量 类名 常量名。。。。范围解析符
    <?php
    class Person{
    public $name='zhang';//添加成员
    public function fn(){//添加方法
    echo 111;
    }
    const txt="hello";//添加常量
    }
    $p=new Person;
    echo $p->name;//这个是访问属性
    echo $p->name=456//这个是赋值
    $p->fn;//这个是访问方法
    echo Person::txt;访问常量
    ?>
    3.类内部对象$this和内存原理
    $this他是一个对象,指向实列化的那个对象
    当我们new实例化的时候,系统会给这个对象分配一个内存空间,内存空间分一个栈内存,一个堆内存,将变量存在栈里,将代码块存在
    堆里,然后将堆的内存地址指向栈中的变量,如果再给这个栈中的变量赋值引用数据类型,那么这个内存地址就会被更改。


    4.变量a和变量p都指向同一个引用地址,二者是同一个对象 ,一遍都变思考:如果让二者是两个不同的对象,改变a但是p不跟
    着改变。需要使用对象克隆 clone
    通过关键字 clone来赋值一个一模一样的对象
    class Person{
    public function fn(){
    // echo $this->name;
    var _dump($this);
    }
    }
    $p=new Person;
    //$p=new Person;
    //$p->fn();//$thjis指向调用他的那个对象
    $a=$p;
    $a->name=456;
    echo $p->name;
    5构.造函数和析构函数
    构造函数,我们在声明类的时候就自然存在,当用new实列的时候,这个函数就会自动调用 我们也可以人为去写些自己的东西,
    析构函数,用于销毁new实列化的内存,如果不销毁内存,系统性能会大大降低。
    new实列化以后,这个函数也会自动调用,销毁原则是先入后出
    静态成员的添加
    静态成员的访问
    在程序员属性前面加上 static关键字就可以了
    6.静态访问
    第一种在类的内部方法中方位
    在类的外部访问
    7.面向对象的三大特征
    封装 对外只告诉你如何操作 ,内部节后你不许用知道。
    对外只提供可操作的接口 ,对内的数据操作不可见。
    继承
    子类继承父类的属性和方法,但是有限继承

    多态:php没有多态,因为php是弱类型语言 ,不会对变量提前进行类型声明。但是有重载
    重载 父类和子类方法相同 子类会覆盖父类的方法。
    8.关键字parent
    在继承中的子类有这个parent 访问父类的常量 父类的方法 父类的静态属性 属性成员不能访问。
    9.final关键字 不可继承的
    如果写在类的前面。表明这个类不能被继承。
    如果写在类的方法前面和属性的前面 说明这个方法和属性也不能被重载
    10.abstract代表抽象类
    如果项目经理需要对所有的子类进行规范,就是说有些程序员必须有,且必须使用那些名字。
    就需要使用抽象类这个概念
    1.抽象类不能被实列化
    2.如果一个类里面有一个方法被声明为抽象类了,这个类就得声明为抽象类;
    3.只要这个方法被声明为抽象的方法了就不能写函数体 将函数后面{}去掉。
    4.函数体由子类去实现。
    5.在继承一个抽象类的时候,子类必须定义父类中的所有抽象方法。不是抽象方法
    abstract class p{
    public $age;
    abstract public function ff($na);
    abstract public function fn();
    }
    class son extends p{
    public function ff($na){
    echo $na;

    }
    public function fn(){

    }
    }
    $pp=new son;
    $pp->ff(23);
    11.接口 interface
    接口的用途和抽象类差不多 都是为了写一些规范
    1.使用interface关键字定义接口 接口在方法都是空的没有函数体
    2.接口中的所有方法都是public
    3.使用implements这个操作符
    4.实现多个接口,接口不能重名
    1接口使用 implements 而抽象类使用extends实现
    2接口中只能申明公有的方法 抽象的方法
    3接口没有构造函数 抽象类有
    4接口可以实现多个接口 ,但是抽象类只能继承1个
    5接口和接口之间方法尽量不要重名 如果重名了 name参数等要保持一致。








  • 相关阅读:
    深入理解PHP原理之变量作用域
    深入理解PHP原理之变量分离/引用
    关于哈希表
    foreach 相关
    Scrapyd-Client的安装
    Scrapyd API的安装
    scrapyd的安装
    快手的小视频爬取
    实现单例模式的几种方式
    京东图书分布式爬虫
  • 原文地址:https://www.cnblogs.com/yangjingyang/p/10679050.html
Copyright © 2020-2023  润新知