【发布时间】:2019-11-27 20:51:17
【问题描述】:
假设我有这个代码:
首先我创建了父级
class Country {
public $country;
public $populationcountry;
public $language;
使用一些方法(与这个问题无关)
public function function1() { }
public function function2() { }
.
.
} //end of parent class
然后我创建孩子
Class city extends Country
{
public $populationcity;
}
然后我创建对象(在这个例子中我只创建了一个)
$city1 = new city();
$city1->populationcity = 10000;
还有一个对象数组
$cities = [$city1];
最后我只想“回显”孩子的属性(人口城市)
foreach ($cities as $city) {
foreach ($city as $k => $v) {
$city->populationcity;
echo $k . ': ' . $v . '<br>';
}
}
输出:
人口城市:10000
国家:
人口国家:
语言:
我想保留父级的方法,而不是父级的属性。我怎样才能做到这一点?
cmets 中的 David 告诉我将属性设置为 Private。我这样做了,它工作得很好,但是当我创建一个 Country 对象时,它会在子类中打印父级的属性。
这是代码,它在父属性为 Public 时给我这个输出。
人口城市:10000
国家:
人口国家:
语言:
国家:英格兰
人口国家:30000
语言:英语
应该打印出来:
人口城市:10000
国家:英格兰
人口国家:30000
语言:英语
当我将它们设置为私有时,我得到了这个:
致命错误:未捕获的错误:无法访问 C:\xampp\htdocs\ejercicios.php:141 中的私有属性 Country::$language 堆栈跟踪:C:\xampp\htdocs\ejercicios 中抛出 #0 {main}。第 141 行的 php
当我将它们设置为受保护时,我得到了这个:
致命错误:未捕获错误:无法访问 C:\xampp\htdocs\ejercicios.php:141 中的受保护属性 Country::$language 堆栈跟踪:C:\xampp\htdocs\ejercicios 中抛出 #0 {main}。第141行的php
class Country {
public $country;
public $populationcountry;
public $language;
}
Class city extends Country
{
public $populationcity;
}
$country1 = new Country();
$country1->language = 'English';
$country1->country = 'ENgland';
$country1->populationcountry = 30000;
$countries = [$country1];
$city1 = new city();
$city1->populationcity = 10000;
$cities = [$city1];
foreach ($cities as $city) {
foreach ($city as $k => $v) {
$city->populationcity;
echo $k . ': ' . $v . '<br>';
}
}
foreach ($countries as $country) {
foreach ($country as $k => $v) {
$country->language;
$country->populationcountry;
$country->country;
echo $k . ': ' . $v . '<br>';
}
}
【问题讨论】:
-
只需将属性设为私有即可。
-
嘿大卫。谢谢!它适用于这个例子。但是,我添加了一个小的复杂性,它没有按预期工作。我在哪里可以给你看代码?这个评论太长了。我应该编辑帖子还是发布答案?谢谢
-
是的,只需编辑您的问题。
-
我刚刚做到了!谢谢!
标签: php inheritance properties parent-child