浅析php面向对象public private protected 访问修饰符

网络编程 2025-03-29 13:04www.168986.cn编程入门

PHP面向对象编程中的访问修饰符

在PHP面向对象编程中,访问修饰符是用于控制类成员(包括属性和方法)的访问权限的关键字。它们决定了哪些代码可以访问和修改这些成员。PHP中的访问修饰符主要有三种:public(公共的)、protected(受保护的)和private(私有的)。

当一个类没有指定成员的访问修饰符时,默认就是public的访问权限。这意味着这些成员在任何地方都可以被访问和修改。

被声明为protected的成员,只允许该类的子类进行访问。这意味着只有继承了这个类的子类才能访问这些成员,而类的外部则无法直接访问。

被定义为private的成员,对于类内部所有成员都可见,没有访问限制。但对类外部来说,这些成员是不可见的,无法被访问或修改。

下面通过一个简单的示例来演示这些访问修饰符的使用:

假设我们有一个名为Woman的类,其中包含了三个成员变量:name(公共的)、age(受保护的)和height(私有的)。还有一个公共方法info()和一个私有方法say()。

```php

class Woman {

public $name = "gaojin"; // 公共属性,任何地方都可以访问

protected $age = "22"; // 受保护属性,只有子类可以访问

private $height = "170"; // 私有属性,仅在类内部可见

function info() { // 公共方法

echo $this->name;

}

private function say() { // 私有方法,只能在类内部调用

echo "这是私有的方法";

}

}

```

如果我们尝试在类的外部直接访问受保护或私有属性,将会报错。同样,私有方法也无法在类的外部被调用。如果有一个子类继承了该类,子类就可以访问父类的公共和受保护成员。例如:

```php

class Girl extends Woman {

function info() { // 可以重新定义父类的public和protected方法

echo $this->name; // 输出父类的公共属性name的值

echo $this->age; // 输出父类的受保护属性age的值(在子类内部可以访问)

// 尝试访问私有属性height会报错,因为即使在子类内部也无法直接访问私有属性。

}

function say() { // 子类可以定义自己的方法,但不能定义父类的私有方法

echo "我是女孩"; // 输出子类的自定义消息

}

}

```

通过创建Girl类的实例并调用其方法,我们可以观察到不同访问修饰符对类成员的影响。需要注意的是,私有成员无法在子类中直接访问或修改,子类只能继承公共和受保护成员。这有助于保护类的内部结构不被外部代码干扰,同时允许子类扩展和定制父类的功能。

上一篇:jquery+CSS3实现淘宝移动网页菜单效果 下一篇:没有了

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by