【问题标题】:Show concrete data of array with objects [duplicate]显示带有对象的数组的具体数据[重复]
【发布时间】:2019-07-04 02:22:31
【问题描述】:

我想显示一个数组的特定数据,我有以下代码,我正在尝试打印 printConcreteStudent 函数来打印我指示通过变量 $name 传递的特定学生。

当试图找到学生时,我收到以下错误:

致命错误:未捕获错误:不能将 Student 类型的对象用作 数组

数组的结构如下:

array(1) {
  [0]=>
  object(Student)#1 (4) {
    ["name"]=>
    string(5) "Student1"
    ["lastname":"Student":private]=>
    string(7) "lastName1"
  }
}

以及我尝试打印特定数据的功能:

function printConcreteStudent($name) {

    foreach($this->students as $key=>$value){

        if($value["name"] == $name){

            echo $value->getName() . " ";
            echo $value->getLastName() . " ";
        }
    }
}

【问题讨论】:

    标签: php


    【解决方案1】:

    当您出现错误状态时,您可以将对象用作数组。在$this->students 中,每个对象都是object(Student) 类型,因此您可以使用“key”索引访问名称字段。你需要将:if($value["name"] == $name){(因为不能使用$value["name"]作为$value是对象)改为:

    if($value->getName() == $name){
    

    【讨论】:

      【解决方案2】:

      students 是对象数组,所以 value 是一个对象,所以 $value->name; 是您访问 name 属性的方式

         foreach($this->students as $key=>$value){
           if($name==$value->name){
            //print the attributes...  
           }
         }
      

      最好将两个值都小写,然后比较,这样即使输入大写字母也能找到结果

      【讨论】:

      • 由于 Student 对象可以封装(私有成员),因此最好为该字段使用 getter(作为getName() 的 if 范围内的 OP 使用 - 请参阅我的答案
      • 同意,这只是一个想法,因为错误是由于将对象作为数组访问。
      猜你喜欢
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 2019-05-01
      • 2021-03-10
      相关资源
      最近更新 更多