Php Foreach在类方法内不起作用
我学习的是PHP5类,比如说我是新来的。但是我尝试使用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
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 />";
?>
如果数组的第一项有我们想要的名称,则打印“男性”,否则打印“女性”。我们正在做什么