zoukankan      html  css  js  c++  java
  • Php对象及对象特性篇

    前言
    以前写C++最多,大二课上学过Java。现在也差不多还给老师了。现在决定针对php重新梳理一遍,夯实基础,设计模式学起来应该会更加得心应手吧。
    介绍
    对象作为数据和功能代码的集合,是程序开发和代码从用的基本单位。
    对象元素

    访问方法或属性

    • $object->propertyname
      $object->methodname ([arg........])

    访问标识符

    类,方法,属性

    • public 可以从外部访问(未定义,默认为public)
    • private 只能在内部访问
    • protected 只能被对象自身的方法或者继承他的子类方法访问
    • 对象被创建后,就会通过引用传参,而不是复制整个对象。复制整个对象可以用clone关键字

    方法,属性

    • static 通过类来调用,而不是对象,这种方法不能访问对象的属性
      HTML::p("hello world!!!"); //调用html类中的静态方法p()

    • final 子类无法重写final方法
      补充$this->是当前对象的引用,指向方法所属的对象 (static方法会失效)

    常量

    • define() 全局常量
    • const 内部常量

    类的特性

    继承(extends)

    • parent::method ( ) ------------- 调用父类中被重写的方法
    • self:: method() -------------- 调用子类中方法

    接口(implements)

    • 提供了定义一个类所遵循的规则的途径,提供了类的方法原型和常量,实现该接口的类必须提供接口中所有方法的具体实现
    • 接口可以继承于其他多个接口,只要他继承的接口声明的方法和子接口中的方法不重名。
    • 语法:
          interface interfacename{
            [function functionname();
             ......
            ]
          }
          
          class classname implements interfacename{
            ......
          }
    

    特征(trait)

    • 允许在不需要创建一个父类的情况下,便可以在不同层次结构的类中复用类外部的代码
    • 语法:
          trait Logger{
            pubilc log ($logString){
            $className = __CLASS__;
            echo "[{$className}]{$logString}";
          }
          }
          
          class User {
            use Logger;
            public $name;
            function __construct($name=''){
              $this->name = $name;
              $this->log("Created user '{$this->name}'");
          }
          }
          
          $user = new User('Alex');		// [User] Created user 'Alex'
          //Logger方法是一个trait, 在UserGroup类实例中是可访问的,就像在类内部定义的方法一样
          //trait也可以同时使用多个 ------- use trait1, trait2,.......
    

    一个方法中使用多个trait,方法名有可能冲突:

          trait Command{
            function run(){
            ......
          }
          }
          
          trait Marathon{
            function run(){
            ......
          }
          }
          
          class Person{
            use Command, Marathon{
            Marathom::run instreadof Conmand;		//用Marathon中的run方法,覆盖Command的run方法
          }
          }
          
          class Person2{
            use Command, Marathon{
            Command::run as runCommand;	//Command中run方法命名为runCommand
            Marathon::run instreadof Command;		//覆盖掉Command中run方法
          }
          }
    

    抽象类(abstract)

    • 父类中只提供方法名,没有具体实现,子类中必须实现父类中的抽象方法,trait中有抽象方法的话,也必须在子类中实现。(抽象类中可能有实现过的函数)
    • 抽象类不可以实例化

    函数

    构造函数

    • 用来在实例化类的时候初始化类对象的特殊函数
    • php不支持构造函数链的自动调用,可以手动在子类构造函数中显式的调用父类构造函数
    • 语法:
          function __construct() {
            ......
          }
    

    析构函数

    • 在对象被销毁时(一个对象的最后一个引用被删除),或者脚本执行结束时,被调用来收回对象的资源。
    • 语法:
          function __destruct() {
            ......
          }
    
  • 相关阅读:
    NodeJs搭建简单的Http和Https服务器
    VSCode C++开发环境配置
    OpenCV查找并发现轮廓
    OpenCV使用连通组件检测并输出图像中的对象
    OpenCV使用阈值截断实现二值分割(黑白图)
    使用OpenCV实现背景减除
    get current UTC datetime of Python
    setTimeout and setInterval counterpart of Python
    setup airflow on MySQL
    HeidiSQL
  • 原文地址:https://www.cnblogs.com/alihenaixiao/p/5813062.html
Copyright © 2011-2022 走看看