这两天有在看php5的面向对象的一些教程, 因为php4用的比较多,所以对面向对象这个概念并不是很熟悉.
这里只是简单记录一下关于public, private和protected.
public(公共的)应该比较容易理解, 完全公开, 任何地方都可以访问, 包括该类内部, 外部, 子类等等.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| <?php class a{ public $a;
function __construct(){ $this->a = "1"; }
function test(){ echo $this->a; } }
class b extends a{ function test2(){ echo $this->a; } }
$a = new a; $a->test();
echo $a->a; $b = new b; $b->test2(); echo $b->a;
|
private(私有的)可以理解为只有对象的内部可以访问, 但是其中有可比较难理解的概念, 就是继承来的public方法可以访问到父类的private方法和属性, 而且实际上private属性和方法在技术上是无法被覆写的, 这个我目前还没有研究太透彻.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| <?php class c{ private $a;
function __construct(){ $this->a = "2"; }
function test(){ echo $this->a; } }
class d extends c{ function test2(){ echo $this->a; } }
class e extends c{ private $a="3"; function test2(){ echo $this->a; } }
$c = new c; $c->test();
$d = new d; echo '['; $d->test(); echo ']'; $d->test2(); echo $d->a; $e = new e; echo '{'; $e->test(); echo '}'; $e->test2();
|
protected (受保护的)我个人理解就是在对象和子对象中你想怎么用都可以, 就是不可以在外面用.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <?php class f{ protected $a = "4"; function test(){ echo $this->a; } }
class g extends f{ function test2(){ echo $this->a; } } $f = new f; $f->test();
$g = new g; $g->test2(); $g->test();
|