public
权限最大,既可以让子类使用,也可以支持实例化之后的调用。
protected
表示的是受保护的,访问的权限是只有在子类和本类中才可以被访问到。
private
表示的是私有,只能够是在当前的类中可以被访问到。
static
static的作用就是能够实现值或者方法在类中不需实例化的情况下调用,同时static修饰的变量具有与值存储的功能,例如我们不使用static运行的结果如下,可以记录当次函数调用次数,限制递归调用次数等。
<?php
function test()
{
$var = 1;
echo $var . PHP_EOL;
$var++;
}
test(); // 1
test(); // 1
test(); // 1
<?php
function test()
{
static $var = 1;
echo $var . PHP_EOL;
$var++;
}
test(); // 1
test(); // 2
test(); // 3
<?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;
class与方法的关键字final
final只能够用来修饰class与function,使用了final之后就不能够被继承。
特殊关键字interface,abstract
interface的意义在于规范编程的风格,设想一下就是如果是实现了一个接口那么我们在使用这个接口类的时候就必须要实现里面的方法,起到了统一命名的作用。
class是可以多继承接口的,接口与接口之间的单继承是通过extends来实现的,class与接口之间的关系确立是通过implements。
- 只要类中有至少一个方法使用了abstract关键字,那么这个类是abstract,要加上相应的关键字;
- 抽象方法,只有方法的声明部分,没有方法体。
- 多人编程的时候规范公共部分的命名规则(不做任何说明,原理跟interface一样);
- 实现不让父级直接实例化使用。