OOP 成员变量可见性
OOP member variable visibility
我有一些 类 扩展了 "Shop",最好的方法是什么,以便父函数即 list_items() 可以用于子 [=15] =]?
class Shop
{
public function list_items() {
foreach($wares as $w)
echo $w;
}
public function buy($item){
}
}
class Brewery extends Shop
{
public $wares = array("Wine", "Beer", "Alcohol", "Sake", "Rum");
public $keepers = array("Jack", "Jill", "Bob", "Sam");
}
function makeShop() //initialize a shop obj
{
$s = new Brewery();
$s->list_items(); //$wares is not visible!
}
使用
$this
在您的商店中进行 foreach Class。
$this 是非静态属性或方法的关键字。
使用 $this,您可以访问所有 class 属性,例如 public $wares。
没有 $this 你不能访问你的 class 属性 - 这个变量是未知的。
foreach($this->wares as $w)
并在脚本末尾调用函数 makeshop()。:
makeshop();
如此完整:
<?php
class Shop
{
public function list_items() {
foreach($this->wares as $w)
echo $w;
}
public function buy($item){
}
}
class Brewery extends Shop
{
public $wares = array("Wine", "Beer", "Alcohol", "Sake", "Rum");
public $keepers = array("Jack", "Jill", "Bob", "Sam");
}
function makeShop() //initialize a shop obj
{
$s = new Brewery();
$s->list_items(); //$wares is not visible!
}
makeshop();
?>
您可以在其他 类 中使用 Shop 中的所有 public 和受保护方法。
$wares
确实是未定义的,因为您应该使用 $this->wares
.
访问它
同时始终将方法和属性的可见性限制在最大值。例如。这里可以设置为protected
.
接下来你应该坚持一个命名约定。在一个项目中使用 makeShop
和 list_items
不是一个好主意。
当您扩展 class 时,您会继承它的所有功能。因此,只需像使用任何其他 class 方法一样使用 $this->list_items()
来引用它们。
$wares
不可见,因为它不是来自任何地方。
将其作为函数参数传递或将其用作class成员:
public function list_items($wares) {
foreach($wares as $w)
echo $w;
}
或:
class Shop
{
public $wares = [];
public function list_items() {
foreach($this->wares as $w)
echo $w;
}
public function buy($item){
}
}
我有一些 类 扩展了 "Shop",最好的方法是什么,以便父函数即 list_items() 可以用于子 [=15] =]?
class Shop
{
public function list_items() {
foreach($wares as $w)
echo $w;
}
public function buy($item){
}
}
class Brewery extends Shop
{
public $wares = array("Wine", "Beer", "Alcohol", "Sake", "Rum");
public $keepers = array("Jack", "Jill", "Bob", "Sam");
}
function makeShop() //initialize a shop obj
{
$s = new Brewery();
$s->list_items(); //$wares is not visible!
}
使用
$this
在您的商店中进行 foreach Class。 $this 是非静态属性或方法的关键字。 使用 $this,您可以访问所有 class 属性,例如 public $wares。 没有 $this 你不能访问你的 class 属性 - 这个变量是未知的。
foreach($this->wares as $w)
并在脚本末尾调用函数 makeshop()。:
makeshop();
如此完整:
<?php
class Shop
{
public function list_items() {
foreach($this->wares as $w)
echo $w;
}
public function buy($item){
}
}
class Brewery extends Shop
{
public $wares = array("Wine", "Beer", "Alcohol", "Sake", "Rum");
public $keepers = array("Jack", "Jill", "Bob", "Sam");
}
function makeShop() //initialize a shop obj
{
$s = new Brewery();
$s->list_items(); //$wares is not visible!
}
makeshop();
?>
您可以在其他 类 中使用 Shop 中的所有 public 和受保护方法。
$wares
确实是未定义的,因为您应该使用 $this->wares
.
同时始终将方法和属性的可见性限制在最大值。例如。这里可以设置为protected
.
接下来你应该坚持一个命名约定。在一个项目中使用 makeShop
和 list_items
不是一个好主意。
当您扩展 class 时,您会继承它的所有功能。因此,只需像使用任何其他 class 方法一样使用 $this->list_items()
来引用它们。
$wares
不可见,因为它不是来自任何地方。
将其作为函数参数传递或将其用作class成员:
public function list_items($wares) {
foreach($wares as $w)
echo $w;
}
或:
class Shop
{
public $wares = [];
public function list_items() {
foreach($this->wares as $w)
echo $w;
}
public function buy($item){
}
}