Php Foreach在类方法内不起作用

Php Foreach在类方法内不起作用,php,foreach,Php,Foreach,我学习的是PHP5类,比如说我是新来的。但是我尝试使用foreach类方法中的循环来获取人的性别,但是它只对第一人称显示正确,而不对第二人称显示正确,第三人称,依此类推 这是我的密码: class Person{ // atteributes or property of class var $first_name; var $last_name; var $legs = 2; var $hand = 2; var $gender; fun

我学习的是PHP5类,比如说我是新来的。但是我尝试使用
foreach
类方法中的循环
来获取人的性别,但是它只对第一人称显示正确,而不对第二人称显示正确,第三人称,依此类推

这是我的密码:

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 />";
第二个人也必须显示男性


<?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 />";
?>

使用foreach循环并检查每个可能性似乎是一种奇怪的实现方法。我建议将foreach函数替换为in_数组函数,当在if语句中使用该函数时,您可以用更少的代码完成同样的事情

示例:

<?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 />";

?>

使用foreach循环并检查每个可能性似乎是一种奇怪的实现方法。我建议将foreach函数替换为in_数组函数,当在if语句中使用该函数时,您可以用更少的代码完成同样的事情

示例:

<?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 />";

?>

对于下面的性别函数,没有任何要求的更改,在函数调用之前写入echo

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";
    }
}

对于下面的性别函数,没有任何要求的更改,并在函数调用之前写入echo

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";
    }
}

这些答案都不能告诉您代码不工作的原因。让我们遵循foreach的逻辑,当first_name=“Ibrar”:

循环1:IF语句为false,如“Ibrar”!==“哈姆扎”。因此,使用了ELSE,它打印女性和女性

其他答案都是好办法。但是假设您仍然希望使用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;

这些答案都不能告诉您代码不工作的原因。让我们遵循foreach的逻辑,当first_name=“Ibrar”:

循环1:IF语句为false,如“Ibrar”!==“哈姆扎”。因此,使用了ELSE,它打印女性和女性

其他答案都是好办法。但是假设您仍然希望使用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;

这里需要注意的是break关键字。如果希望得到预期的结果,则需要跟踪代码流。以下是根据您的代码显示的内容:

我将从您做错的代码部分开始:

<?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 />";

?>
对于
$person
对象,
$person->gender()
将按如下方式执行:

$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;
迭代1:

<?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 />";

?>
foreach($name为$name)
results
$name=“Hamza”

$this->first\u name
“Hamza”
,它是
==$name

如果此处条件为真,则打印“男性”

break中断foreach循环

没有其他迭代。

输出为:

Male
Female
对于
$person2
对象,
$person2->gender()
将按如下方式执行:

$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;
迭代1:

<?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 />";

?>
foreach($name为$name)
results
$name=“Hamza”

$this->first\u name
“Ibrar”
,它是
!=$名称

如果此处的条件不正确,即为假,则打印“女性”

break中断foreach循环

没有其他迭代。

输出为:

Male
Female
您的代码没有说出您想要的内容。

上面写着:

<?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 />";

?>
如果数组的第一项有我们想要的名称,则打印“男性”,否则打印“女性”。我们完成了,只有在检查数组中的第一项之后,我们才能跳出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 />";

?>
对于类
Person
中没有
$first\u name
属性值为
“Hamza”
的每个对象,将从调用成员函数
gender()
打印
“Female”

解决方案是编写代码说:

<?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 />";

?>
如果条件为
false
,则不应中断循环,因为必须使用
$names
数组中的每个项检查
$this->first\u name
。如果
$names
数组中的所有项返回
false
,则
$gender
属性值为“女性”,也会打印出来

解决方案代码:
其他答案中已经提到。

这里您需要关心的是break关键字。如果希望得到预期的结果,则需要跟踪代码流。以下是根据您的代码显示的内容:

我将从您做错的代码部分开始:

<?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 />";

?>
对于
$person
对象,
$person->gender()
将按如下方式执行:

$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;
迭代1:

<?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 />";

?>
foreach($name为$name)
results
$name=“Hamza”

$this->first\u name
“Hamza”
,它是
==$name

如果此处条件为真,则打印“男性”

break中断foreach循环

没有其他迭代。

输出为:

Male
Female
对于
$person2
对象,
$person2->gender()
将按如下方式执行:

$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;
迭代1:

<?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 />";

?>
foreach($name为$name)
results
$name=“Hamza”

$this->first\u name
“Ibrar”
,它是
!=$名称

如果此处的条件不正确,即为假,则打印“女性”

break中断foreach循环

没有其他迭代。

输出为:

Male
Female
您的代码没有说出您想要的内容。

上面写着:

<?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 />";

?>
如果数组的第一项有我们想要的名称,则打印“男性”,否则打印“女性”。我们正在做什么