zoukankan      html  css  js  c++  java
  • 前端学PHP之面向对象系列第一篇——类和对象

      类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对象的抽象就是类。类描述了一组有相同特性(属性)和相同行为(方法)的对象。在开发时,要先抽象类再用该类去创建对象,而在程序中直接使用的是对象而不是类

      类是一个独立的程序单位,是具有相同属性和服务的一组对象集合。它为属于该类的所有对象提供了统一抽象描述,其内部包括成员属性和服务方法两个主要部分

      每个类的定义都以关键字class开头,后面跟着类名,后面跟着一对花括号,里面包含类的属性与方法的定义

      一个类可以包含有属于自己的常量,变量(称为“属性”)以及函数(称为“方法”)

      [注意]使用->操作符时,变量varvar前面的美元符号是要省略的

    复制代码
    <?php
    class SimpleClass
    {
        //成员属性
        public $var = 'a default value';
    
        //成员方法
        public function displayVar() {
            echo $this->var;
        }
    }
    ?>
    复制代码

    成员属性

      类的变量成员叫做“属性”,或者叫“字段”、“特征”。属性声明是由关键字public、protected或private开头,然后跟一个普通的变量声明来组成。属性中的变量可以初始化,但是初始化的值必须是最终的值,而不应是带运算符的表达式、变量、方法或函数调用

      如果直接使用 var 声明属性,而没有用 public,protected 或 private 之一,PHP5会将其视为 public

    复制代码
    public $var3 = 1+2;             //错误格式
    public $var4 = self::myStaticMethod();     //错误格式
    public $var5 = $myVar;             //错误格式
    
    public $var6 = 100; //普通数值(4个标量:整数、浮点数、布尔、字串)
    public $var6 = myConstant;         //常量
    public $var7 = self::classConstant;     //静态属性
    public $var8 = array(true, false);      //数组
    复制代码

    成员方法

    [修饰符] function 方法名(参数..){
        [方法体]
        [return 返回值]
    }

      成员方法的修饰符包括:public、protected、private、static、abstract、final

      声明的成员方法必须和对象相关,不能是一些没有意义的操作

    复制代码
    public function say(){   
        echo "说话";      
    }       
    public function run(){    
        echo "走路";      
    }
    复制代码

    对象

      在客观世界里,所有的事物都是由对象和对象之间的联系组成的。对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位

      要创建一个对象,也就是实例化一个类,必须使用new关键字

      如果在new之后跟着的是一个包含有类名的字符串,则该类的一个实例同样被创建

    复制代码
    <?php
    $instance = new SimpleClass();
    
    // 也可以这样做:
    $className = 'Foo';
    $instance = new $className(); // Foo()
    ?>
    复制代码

    成员访问

      类中包含成员属性与成员方法两个部分,可以使用“new”关键字来创建一个对象,即:$引用名 = new 类名(构造参数);可以使用特殊运算符“->”来访问对象中的成员属性或成员方法

    $引用名 = new 类名(构造参数);
    $引用名->成员属性=赋值;   //对象属性赋值    
    echo $引用名->成员属性;   //输出对象的属性    
    $引用名->成员方法(参数);//调用对象的方法

      [注意]如果对象中的成员不是静态的,那么这是唯一的访问方式

      当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样。此行为和给函数传递入实例时一样。可以用克隆给一个已创建的对象建立一个新实例

    复制代码
    <?php
    class SimpleClass{
    
    }
    $instance = new SimpleClass();
    $assigned   =  $instance;
    $reference  =& $instance;
    $instance->var = '$assigned will have this value';
    $instance = null; 
    
    var_dump($instance);//null
    var_dump($reference);//null
    /*
    object(SimpleClass)[1]
      public 'var' => string '$assigned will have this value' (length=30)
     */
    var_dump($assigned);
    ?>
    复制代码

    this

      当一个方法在类定义内部被调用时,有一个可用的伪变量this,特殊对象的引用this就是在对象内部的成员方法中,代表本对象的一个引用,但只能在对象的成员方法中使用,不管是在对象内部使用$this访问自己对象内部成员。还是在对象外部通过对象的引用名称访问对象中的成员,都需要使用特殊的运算符“->”来完成访问

    复制代码
    <?php
    class A
    {
        function foo()
        {
            if (isset($this)) {
                echo '$this is defined (';
                echo get_class($this);
                echo ")
    ";
            } else {
                echo "$this is not defined.
    ";
            }
        }
    }
    
    class B
    {
        function bar()
        {
            // Note: the next line will issue a warning if E_STRICT is enabled.
            A::foo();
        }
    }
    
    $a = new A();
    $a->foo();//$this is defined (A) 
    
    A::foo();//$this is not defined. 
    $b = new B();
    $b->bar();//$this is defined (B) 
    
    B::bar();//$this is not defined.
    ?>
    复制代码
     
     
  • 相关阅读:
    使用Parallel计算目录中的文件字节长度
    任务工厂
    启动新任务和子任务
    服务器端小程序
    Java核心技术II读书笔记(三)
    Java核心技术II读书笔记(二)
    Java核心技术II读书笔记(一)
    多线程-线程的中断
    http协议详解
    java UncaughtExceptionHandler 处理线程意外中止
  • 原文地址:https://www.cnblogs.com/IT-LM/p/6961227.html
Copyright © 2011-2022 走看看