我倾向于php5类,实例我是新手。但是我试图在Class Methods
内使用foreach
循环来获取该人的性别,但它仅适合第一人称,但不适合第二人称第3人,依此类推。
这是我的代码:
class Person{
// atteributes or property of class
var $first_name;
var $last_name;
var $legs = 2;
var $hand = 2;
var $gender;
function say_hello(){
echo "Hello inside the class from " . get_class($this) . "<br />";
}
// full name function
function full_name(){
echo $this->first_name ." ". $this->last_name;
}
// Gender
function gender(){
$names = array("Hamza","Ali","Ibrar","Muqeet","Hassan","Umer","Shaveer");
foreach($names as $name){
if($this->first_name == $name){
echo $this->gender = "Male";
break;
}else{
echo $this->gender = "Female";
break;
}
}
}
}
$person = new Person();
$person->first_name = "Hamza";
$person->last_name = "Nisar";
$person->full_name();
echo "<br />";
$person->gender();
echo "<br />";
/*---------------------*/
$person2 = new Person();
$person2->first_name = "Ibrar";
$person2->last_name = "Ahmed";
$person2->full_name();
echo "<br />";
$person2->gender();
echo "<br />";
这是结果:
Hamza Nisar
Male
Ibrar Ahmed
Female
它也必须显示第二人称的男性
使用foreach循环并检查每种可能性似乎是一种实现这一目标的奇怪方法。我建议用IN_ARRAY函数替换foreach函数,当在语句中使用时,该功能允许您使用较少的代码进行相同的操作。
示例:
<?php
class Person{
// atteributes or property of class
var $first_name;
var $last_name;
var $legs = 2;
var $hand = 2;
var $gender;
function say_hello(){
echo "Hello inside the class from " . get_class($this) . "<br />";
}
// full name function
function full_name(){
echo $this->first_name ." ". $this->last_name;
}
// Gender
function gender(){
$names = array("Hamza","Ali","Ibrar","Muqeet","Hassan","Umer","Shaveer");
if(in_array($this->first_name, $names)){
echo $this->gender = "Male";
}
else {
echo $this->gender = "Female";
}
}
}
$person = new Person();
$person->first_name = "Hamza";
$person->last_name = "Nisar";
$person->full_name();
echo "<br />";
$person->gender();
echo "<br />";
/*---------------------*/
$person2 = new Person();
$person2->first_name = "Ibrar";
$person2->last_name = "Ahmed";
$person2->full_name();
echo "<br />";
$person2->gender();
echo "<br />";
?>
这些答案都不告诉您为什么您的代码不起作用。让我们按照first_name =" ibrar"的逻辑来遵循foreach的逻辑:
$names = array("Hamza","Ali","Ibrar","Muqeet","Hassan","Umer","Shaveer");
foreach($names as $name){
if($this->first_name == $name){
echo $this->gender = "Male";
break;
}else{
echo $this->gender = "Female";
break;
}
}
loop1:if语句是错误的,为" ibrar"!==" hamza"。因此,使用了其他印刷女性并断裂的否则。
其他答案是很好的修复。但是,假设您仍然想使用 foreach 循环。您可以做这样的事情:
$this->gender = 'Female';
$names = array("Hamza","Ali","Ibrar","Muqeet","Hassan","Umer","Shaveer");
foreach($names as $name){
if ($this->first_name === $name) {
$this-gender = 'Male';
break;
}
}
echo $this->gender;
<?php
class Person{
// atteributes or property of class
var $first_name;
var $last_name;
var $legs = 2;
var $hand = 2;
var $gender;
function say_hello(){
echo "Hello inside the class from " . get_class($this) . "<br />";
}
// full name function
function full_name(){
echo $this->first_name ." ". $this->last_name;
}
// Gender
function gender($newname){
$names = array("Hamza","Ali","Ibrar","Muqeet","Hassan","Umer","Shaveer");
if(in_array($this->first_name, $names)){
echo $this->gender = "Male";
}else{
echo $this->gender = "Female";
}
}
}
$person = new Person();
$person->first_name = "Hamza";
$person->last_name = "Nisar";
$person->full_name();
echo "<br />";
$person->gender($person->first_name);
echo "<br />";
/*---------------------*/
$person2 = new Person();
$person2->first_name = "Ibrar";
$person2->last_name = "Ahmed";
$person2->full_name();
echo "<br />";
$person2->gender($person2->first_name);
echo "<br />";
?>
您需要关心的东西是 break 关键字。如果您想获得预期的结果,则需要跟踪代码的流程。这是根据您的代码所说的:
我将从您做错的代码部分开始:
对于$person
对象, $person->gender()
将像这样执行:
迭代1:
foreach($names as $name)
结果$name = "Hamza"
$this->first_name
是 "Hamza"
,是 == $name
如果这里的条件为真,则打印"男性"。
break;
突破foreach循环。
没有其他迭代。
输出为:
Male
对于$person2
对象, $person2->gender()
将这样执行:
迭代1:
foreach($names as $name)
结果$name = "Hamza"
$this->first_name
是"Ibrar"
,是!= $name
如果这里的条件不正确,即是错误的,则打印"女性"。
break;
突破了foreach循环。
没有其他迭代。
输出为:
Female
您的代码不说您想要什么。
它说:
如果Array的第一项具有我们想要的名称,请打印"男性",否则打印"女性"。我们已经完成并仅在检查阵列中的第一项后才突破foreach循环。我们不需要检查同一数组中的其他项目。
,这将是结果:
对于Person
类的每个对象,您创建的没有$first_name
属性值作为"Hamza"
,"Female"
将从呼叫到成员函数gender()
。
解决方案是编写代码:
如果条件为false
,则不应脱离循环,因为必须使用$names
数组中的每个项目检查$this->first_name
。如果$names
阵列中的所有项目返回false
,则$gender
属性值是"女性"。
解决方案代码:其他答案已经提到。
没有foreach requred更改yor性别函数如下,并在函数调用之前编写回声。
function gender(){
$names = array("Hamza","Ali","Ibrar","Muqeet","Hassan","Umer","Shaveer");
if(in_array($this->first_name,$names)){
return $this->gender = "Male";
}else{
return $this->gender = "Female";
}
}