在php中,类的访问修饰符是指定义类成员变量和方法的访问权限,它可以控制类成员变量和方法的访问范围。php中有三个不同的访问修饰符:public、protected和private。
public: 公共的,所有人都可以访问。 protected: 保护的,只有当前类和子类可以访问。 private: 私有的,只有当前类才能访问。
public 表明该成员变量或方法是公开的,即所有人都可以使用它们。protected 表明该成员变量或方法是保护的,即只有当前类和子类才能使用它们。而 private 表明该成员变量或方法是私有的,即只有当前类才能使用它们。
在php中,如果不添加访问修饰符(也就是不写 public、protected 或 private )时,则表明该成员变量或方法是 public 的。因此在大多数情况下都会省略 public 关键字。
此外还要注意一些特殊情况:如果一个方法声明为 private (即使在子类中也不能够被覆盖/重写/覆盖/重写/覆盖/重写/覆盖/重写/覆盖/重写/覆盖/重写/覆盖/重写/覆盖/重写 )时;如果一个属性声明为 protected (即使在子类中也不能够被保存到对应对象中去 )时;如果一个属性声明为 public (即使在子类中也不能够通过对应对象来进行保存 )时;如果一个方法声明为 static (即使在子类中也不能够通过对应对象来进行保存 )时;如果一个属性声明为 final (即使在子类中也不能够通过对应对象来进行保存 )时;如果一个方法声明为 abstract ( 子类必须实例化该方法 ) 时; 如果一个借口声明了 final ( 子类不能够实例化该借口 ) 时; 都会遇到特别情况。
访问控制修饰符可以放在类之前,方法定义或属性来改变PHP对待它们的方式。
访问修饰符 | 含义 |
---|---|
Public | 将属性或方法设置为可从任何地方访问 |
Private | 将属性或方法设置为只能由其自己的类或对象访问 |
Protected | 将属性或方法设置为可由其类或其后代访问 |
Final | Set属性,方法或类不能在子类中重写 |
Abstract | Set方法或类不能直接使用。 我们必须子类化它。 |
类中的大多数变量应标记为保护或私人。
公共属性和方法可以从任何地方访问。
<?PHP
class Book {
public $Name;
public function say() {
print "PHP!n";
}
}
class PythonBook extends Book {
public function say() {
print "Python!n";
}
}
$aBook = new PythonBook;
$aBook->Name = "Python";
print $aBook->Name;
?>
默认情况下,所有类方法都是public的。
上面的代码生成以下结果。
私有属性只能在自己的类中访问。
<?PHP
class Book {
private $Name;
private $NameTag;
public function setName($NewName) {
// etc
}
}
?>
子类无法访问私有父方法和属性。如果你想这样做,你需要protected关键字。
受保护的属性和方法可在其自己的类和子类中访问。考虑下面的代码:
<?PHP//from w w w.j a v a 2 s . co m
class Book {
public $Name;
protected function getName() {
return $this->Name;
}
}
class Poodle extends Book {
public function say() {
print ""Book", says " . $this->getName();
}
}
$aBook = new Poodle;
$aBook->Name = "PHP";
$aBook->say();
?>
上面的代码生成以下结果。
下面的代码显示了如何使用Private成员隐藏信息。
//from w w w. ja va 2s . c o m
<?php
class Widget
{
private $name;
private $price;
private $id;
public function __construct($name, $price)
{
$this->name = $name;
$this->price = floatval($price);
$this->id = uniqid();
}
//checks if two widgets are the same
public function equals($widget)
{
return(($this->name == $widget->name) AND
($this->price == $widget->price));
}
}
$w1 = new Widget("Cog", 5.00);
$w2 = new Widget("Cog", 5.00);
$w3 = new Widget("Gear", 7.00);
//TRUE
if($w1->equals($w2))
{
print("w1 and w2 are the same<br>n");
}
//FALSE
if($w1->equals($w3))
{
print("w1 and w3 are the same<br>n");
}
//FALSE, == includes id in comparison
if($w1 == $w2)
{
print("w1 and w2 are the same<br>n");
}
?>
上面的代码生成以下结果。
PHP教程 -PHP开关要针对一系列不同的值测试表达式,并做不同的任务取决于匹配的值。句法在switch / case块中,你指定什么你正在...
DIRECTORY_SEPARATOR说明:目录分隔符 :在生成目录路径时用DIRECTORY_SEPARATOR 代替分隔符可以解决windows/linux不同环境下目...
定义和用法empty—检查一个变量是否为空语法 bool empty ( mixed $var )判断一个变量是否被认为是空的。当一个变量并不存在,或...
定义和用法import_request_variables—将 GET/POST/Cookie 变量导入到全局作用域中语法 bool import_request_variables ( stri...
定义和用法is_float()—检测变量是否是浮点型语法 bool is_float ( mixed $var )如果 var 是 float 则返回 TRUE,否则返回 FALSE...