【问题标题】:PHP - using methods to input data into ArrayPHP - 使用方法将数据输入数组
【发布时间】:2023-03-04 14:00:01
【问题描述】:

这是我在这里的第一篇文章,如果我犯了一两个错误,请原谅我:)

前几天我有一次面试(这个工作机会甚至与 PHP 无关),雇主给了我一些练习来向他展示我的技能。目前我被困在 PHP 上,这是我第一次在 PHP 中做任何事情,我对这个完全陌生。我真的很想要这份工作,所以我希望你能帮助我:)

任务: 创建类“Person”,在 Person 内部创建一个名为“data”的数组变量,键为:“name”、“surname”和“age”,然后创建方法 addPerson(),它将用数据填充数组。创建另一个方法 - showPerson() 来显示收集的数据(您可以使用 print_r();)。

到目前为止,我已经做了这个,但这完全是一团糟,它不起作用。我对PHP一无所知,代码严格来自这里和其他网站。

<?php

class Person
{

    private $data = Array(
        'name'    => array(),
        'surname' => array(),
        'age'     => array()
    );

    function addPerson($name, $surname, $age)
    {
        array_push($this->$data['name']    = $name);
        array_push($this->$data['surname'] = $surname);
        array_push($this->$data['age']     = $age);
    }

    function showPerson()
    {
        echo json_encode($data);
        //print_r($data);
    }

}

$human = new Person;
$man->addPerson("John", "Johnes", 50);
$woman->addPerson("Maria", "Johnes", 45);
$human->showPerson();

注意:未定义的变量:数据;致命错误:无法访问空属性

错误标记了 addPerson 方法中的第一个 array_push。我不知道如何修复代码以使其正常工作。提前谢谢你。

【问题讨论】:

  • 试试$this-&gt;datadane 也是错字吗?
  • 我也不是 PHP 人,但这是我的想法:$this->$data['name'] = $name 正在为 $data['name'] 分配一个字符串。但是你声明 $data['name'] 指向一个数组,而不是一个字符串
  • @chris85 是的,这是一个错字,我编辑了它。

标签: php arrays class methods


【解决方案1】:

如下所示更改您的代码:

class Person {

    private $data = Array(
        'name' => array(),
        'surname' => array(),
        'age' => array()
    );

    function addPerson($name, $surname, $age) {
        array_push($this->data['name'], $name);
        array_push($this->data['surname'], $surname);
        array_push($this->data['age'], $age);
    }

    function showPerson() {
        echo json_encode($this->data);
    }

}

$human = new Person;
$human->addPerson("John", "Johnes", 50);
$human->showPerson();

http://php.net/manual/en/function.array-push.php
array_push 接受两个参数:数组和要压入数组末尾的第一个值

【讨论】:

  • @RomanPerekherst 谢谢老兄!它可以工作,但在结果之前仍然有一个警告:“array_push() 需要至少 2 个参数,1 个给定”并指向那些 array_push 行。我该如何摆脱它?
  • 欢迎您!您确定已将两个参数传递给每个 array_push 调用吗?你能告诉我其中一条 array_push 行吗?
  • @RomanPerekherst 这里是:array_push($this->data['name'] = $name); - 我必须使用“=”而不是“,”,因为它不能正确显示结果。使用“,”有“array_push() 期望参数 1 是数组,给定字符串”警告。
  • 我想你已经改变了$data的属性内容。如果您要使用array_push,那么您的$data 属性应该具有以下结构:private $data = Array( 'name' =&gt; array(), 'surname' =&gt; array(), 'age' =&gt; array() );。如果你用字符串改变了嵌套数组,比如'name' =&gt; '',那么把你的addPerson方法内容改成这样:$this-&gt;data['name'] = $name; $this-&gt;data['surname'] = $surname; $this-&gt;data['age'] = $age;
  • 是的,你是对的。很抱歉我在这里造成了一些问题。多亏了你,我可能离完成我的任务又近了一步:)
【解决方案2】:

使用:$this-&gt;data['name'] 而不是 $this-&gt;$data['name'](数据前面没有美元符号)。

另外,不需要将姓名、姓氏和年龄初始化为数组。你可以试试这样的:

private $data = Array(
'name' => '',
'surname' => '',
'age' => 0
);

那你可以试试 Nechemya-Kanelsky 建议的 addPerson 方法

【讨论】:

    【解决方案3】:

    试试这个。

        <?php
        class Person {
        private $data = Array(
        'name' => array(),
        'surname' => array(),
        'age' => array()
        );
    
        function addPerson($name, $surname, $age){
            $this->data['name'] = $name;
            $this->data['surname'] = $surname;
            $this->data['age'] = $age;
        }
        function showPerson(){
            echo json_encode($this->data);
            //print_r($this->data);
        }   
        } 
        $man = new Person;
        $man -> addPerson("John", "Johnes", 50);
        $man -> showPerson();
        $woman = new Person;
        $woman -> addPerson("Maria", "Johnes", 45);
        $woman -> showPerson();
        ?>
    

    【讨论】:

      【解决方案4】:

      多人:

      class Person {
          public $data = array();
      
          public function addPerson($name, $surname, $age){
              $this->data[] = array(
                  'name'=>$name,
                  'surname'=>$surname,
                  'age'=>$age
              );
          }
      
          public function showPeople(){
              // echo json_encode($data);
              print_r($this->data);
          }   
      
      } 
      
      $Person = new Person;
      $Person->addPerson("John", "Johnes", 50);
      $Person ->addPerson("Maria", "Johnes", 45);
      $Person->showPeople();
      

      单身人士:

      class Person {
          public $data = array();
      
          public function addPerson($name, $surname, $age){
              $this->data = array(
                  'name'=>$name,
                  'surname'=>$surname,
                  'age'=>$age
              );
          }
      
          public function showPerson(){
              // echo json_encode($data);
              print_r($this->data);
          }   
      
      } 
      
      $Man = new Person;
      $Man->addPerson("John", "Johnes", 50);
      $Man->showPerson();
      
      $Woman = new Person;
      $Woman->addPerson("Maria", "Johnes", 45);
      $Woman->showPerson();
      

      很明显,您应该阅读一些 PHP OOP 初学者指南以更好地理解。

      【讨论】:

      • You needed to change "private" to "public" Serioulsy?为什么?
      【解决方案5】:

      不太清楚为什么必须预定义数组。这个例子有效,类似于@RomanPerekhrest 的回答,除了没有所有的推送业务。

      class Person {
      
          private $data = array();
      
          function addPerson($name, $surname, $age){
              $this->data['name'] = $name;
              $this->data['surname'] = $surname;
              $this->data['age'] = $age;
          }
      
          function showPerson(){
              echo json_encode($this->data);
              //print_r($data);
          }
      
      }
      $human = new Person;
      $human -> addPerson("John", "Johnes", 50);
      $human -> showPerson();
      

      【讨论】:

        【解决方案6】:

        根据任务,您需要使用以下格式在您的 Person 对象中创建一个名为“data”的数组

        Array
        (
            [name] => Maria
            [surname] => Johnes
            [age] => 45
        )
        

        为此你可以使用这个类

        <?php
        
        class Person
        {
            private $data = Array();
        
            function addPerson($name, $surname, $age)
            {
                $this->data = ['name' => $name, 'surname' => $surname, 'age' => $age];
            }
        
            function showPerson()
            {
                print_r($this->data);
            }
        
        }
        
        //Using to create a woman
        $woman = new Person;
        $woman->addPerson("Maria", "Johnes", 45);
        $woman->showPerson();
        
        
        //Using to create a man
        $man = new Person;
        $man->addPerson("John", "Johnes", 50);
        $man->showPerson();
        

        使用此链接查看此运行 https://eval.in/512101

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-03-14
          • 2018-03-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-03
          • 1970-01-01
          相关资源
          最近更新 更多