天天看点

PHP中public,private,protected,abstract等关键字的用法

public

权限最大,既可以让子类使用,也可以支持实例化之后的调用。

protected

表示的是受保护的,访问的权限是只有在子类和本类中才可以被访问到。

private

表示的是私有,只能够是在当前的类中可以被访问到。

static

static的作用就是能够实现值或者方法在类中不需实例化的情况下调用,同时static修饰的变量具有与值存储的功能,例如我们不使用static运行的结果如下,可以记录当次函数调用次数,限制递归调用次数等。

<?php
function test()
{
    $var = 1;
    echo $var . PHP_EOL;
    $var++;
}
test(); // 1
test(); // 1
test(); // 1      
PHP中public,private,protected,abstract等关键字的用法
<?php
function test()
{
    static $var = 1;
    echo $var . PHP_EOL;
    $var++;
}
test(); // 1
test(); // 2
test(); // 3      
PHP中public,private,protected,abstract等关键字的用法
<?php

class Test
{
    private $private     = 'private';
    protected $protected = 'protected';
    public $public       = 'public';

    private function private_function()
    {
        echo $this->private . PHP_EOL;
    }
    protected function protected_function()
    {
        echo $this->protected . PHP_EOL;
    }
    public function public_function()
    {
        echo $this->public . PHP_EOL;
    }
}

class Test_1 extends Test
{
    static $static = 0;
    public function public_function_1()
    {
        echo $this->public_function();
    }

    public function public_function_2()
    {
        echo $this->private_function();
    }

    public function public_function_3()
    {
        echo $this->protected_function();
    }

    public function test_static_var()
    {
        echo $this::$static . PHP_EOL;
        $this::$static++;
    }

    public function test_static_var1()
    {
        $this::$static++;
        echo $this::$static . PHP_EOL;
    }
}
$Test   = new Test();
$Test_1 = new Test_1();
$Test->public_function();
// $Test->private_function();
// $Test->protected_function();

$Test_1->public_function_1();
$Test_1->public_function_3();
$Test_1->test_static_var();
$Test_1->test_static_var();
$Test_1->test_static_var();
$Test_1->test_static_var1();
echo $Test_1::$static . PHP_EOL;

$Test_1 = new Test_1();
echo $Test_1::$static . PHP_EOL;      
PHP中public,private,protected,abstract等关键字的用法

class与方法的关键字final

final只能够用来修饰class与function,使用了final之后就不能够被继承。

特殊关键字interface,abstract

interface的意义在于规范编程的风格,设想一下就是如果是实现了一个接口那么我们在使用这个接口类的时候就必须要实现里面的方法,起到了统一命名的作用。

class是可以多继承接口的,接口与接口之间的单继承是通过extends来实现的,class与接口之间的关系确立是通过implements。

  1. 只要类中有至少一个方法使用了abstract关键字,那么这个类是abstract,要加上相应的关键字;
  2. 抽象方法,只有方法的声明部分,没有方法体。
  1. 多人编程的时候规范公共部分的命名规则(不做任何说明,原理跟interface一样);
  2. 实现不让父级直接实例化使用。