zoukankan      html  css  js  c++  java
  • 前端学PHP之面向对象系列第四篇-----关键字

    public

      public表示公有,它具有最大的访问权限,被定义为公有的类成员可以在任何地方被访问

      如果属性用 var 定义,则被视为公有,如果方法没有设置关键字,则该方法默认为公有

    复制代码
    <?php
    class demo{
        public $public = 1;
        function test($var){
            echo "{$var}000";
        }
    }
    $d1 = new demo;
    $d1->test($d1->public);//1000
    ?>
    复制代码

    protected

      protected表示受保护的,被定义为受保护的类成员则可以被其子类和父类访问

    复制代码
    <?php
    class demo{
        protected function fn(){
            echo '111';
        }
    }
    class demo1 extends demo{
        function test(){
            parent::fn();
        }    
    }
    $d1 = new demo1;
    $d1->test();//111
    ?>
    复制代码

    private

      private表示私有的,被定义为私有的类成员则只能被其定义所在的类访问

    复制代码
    <?php
    class demo{
        private $private = 1;
        function test(){
            echo($this->private);
        }
    }
    $d1 = new demo;
    $d1->test();//1
    ?>    
    复制代码

    final

      PHP5新增了final关键字,它只能用来修饰类和方法不能使用final这个关键字来修饰成员属性,因为final是常量的意思,我们在PHP里定义常量使用的是define()函数和const关键字,所以不能使用final来定义成员属性

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

    复制代码
    <?php
    class BaseClass {
       public function test() {
           echo "BaseClass::test() called
    ";
       }
       final public function moreTesting() {
           echo "BaseClass::moreTesting() called
    ";
       }
    }
    class ChildClass extends BaseClass {
       public function moreTesting() {
           echo "ChildClass::moreTesting() called
    ";
       }
    }
    // Results in Fatal error: Cannot override final method BaseClass::moreTesting()
    ?>
    复制代码

    static

      static关键字表示静态的意思,用于修饰类的成员属性和成员方法(即为静态属性和静态方法)

      类中的静态属性和静态方法不用实例化(new)就可以直接使用类名访问

      [注意]静态属性不能通过一个类已实例化的对象来访问,但静态方法可以

      由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用,静态属性不可以由对象通过 -> 操作符来访问

      用静态方式调用一个非静态方法会导致一个 E_STRICT 级别的错误

      就像其它所有的 PHP 静态变量一样,静态属性只能被初始化为文字或常量,不能使用表达式。所以可以把静态属性初始化为整数或数组,但不能初始化为另一个变量或函数返回值,也不能指向一个对象

    复制代码
    <?php
    class Foo
    {
        public static $my_static = 'foo';
        public function staticValue() {
            return self::$my_static;
        }
    }
    class Bar extends Foo
    {
        public function fooStatic() {
            return parent::$my_static;
        }
    }
    print Foo::$my_static . "
    ";//'foo'
    $foo = new Foo();
    print $foo->staticValue() . "
    ";//'foo'
    print $foo::$my_static . "
    ";//'foo'
    print $foo->my_static . "
    "; //报错 
    ?>
    复制代码

    const

      可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用$符号,而是使用const

      常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用

    复制代码
    <?php
    class MyClass
    {
        const constant = 'constant value';
        function showConstant() {
            echo  self::constant . "
    ";
        }
    }
    echo MyClass::constant . "
    ";//'constant value'
    $classname = "MyClass";
    echo $classname::constant . "
    "; //'constant value'
    $class = new MyClass();
    $class->showConstant();//'constant value'
    echo $class::constant."
    ";//'constant value'
    ?>
    复制代码

    this

      当一个方法在类定义内部被调用时,有一个可用的伪变量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.
    ?>
    复制代码

    self

      在类的方法中,不能用this来引用静态变量或静态方法,而需要用self来引用

    复制代码
    <?php
    class MyClass
    {
        const constant = 'constant value';
        static function showConstant() {
            echo  self::constant . "
    ";
        }
    }
    $var = new MyClass;
    echo $var->showConstant();//constant value
    ?>
    复制代码

    parent

      parent用于在子类中调用父类中定义的成员方法或常量

    复制代码
    <?php
    class MyClass{
        function fn(){
            echo('111');
        }
        const A = 'a';
    }
    class Class1 extends MyClass{
        function test(){
            echo parent::fn().parent::A;
        }
    }
    $var = new Class1;
    $var->test();//111a
    ?>
     
  • 相关阅读:
    python字符串字典列表互转
    列表迭代器 ListIterator
    并发修改异常处理
    二月天 案例
    Calendar类
    Date类
    冒泡排序
    内部类
    python第三天
    Layui——checkbox使用
  • 原文地址:https://www.cnblogs.com/IT-LM/p/6970690.html
Copyright © 2011-2022 走看看