【问题标题】:PHP, how do I pass variables between methods?PHP,如何在方法之间传递变量?
【发布时间】:2021-01-23 20:00:34
【问题描述】:

我正在尝试将变量从一种方法传递给另一种方法。

我正在从事件表中获取日期,以便以另一种方法构建动态查询。

class Player extends Database {
    private $start_date;
    private $end_date;
    private $sumCase;

protected function getEvents() {
        $sql = "SELECT * FROM `events`";
        $stmt = $this->connect()->prepare($sql);
        $stmt->execute();
        $results = $stmt->fetchAll();

        $event_arr = array();
        foreach($results as $result) {
            $event_name = $result['event_name'];
            $this->start_date = $result['start_date'];
            $this->end_date = $result['end_date'];

            $this->sumCase[] = "SUM(CASE WHEN date BETWEEN $this->start_date AND $this->end_date THEN 1 ELSE 0 END) '$event_name'";
            $dateBetween[] = "date BETWEEN $this->start_date AND $this->end_date";
            array_push($event_arr, array(
                "name" => $result['event_name'],
                "start" => $result['start_date'],
                "end" => $result['end_date'],
            ));
        }
        return print_r($this->sumCase);
    }

这将毫无问题地返回我的 sumCase 数组,我现在正尝试以另一种方法访问此 sumCase 数组以构建查询:

protected function getPlayerEvents() {
        $sql = "SELECT count(chalID) as total, ";
        $sql .=' '.implode(', ', $this->sumCase); 
        $sql .="from (SELECT * FROM times where ("; //ignore this
        $sql .="date BETWEEN 159310659 AND 1593538594  OR date BETWEEN 1693538594 AND 1793538594"; //ignore this
        $sql .=") AND plaID = 1 group by chalID) A"; //ignore this

        $stmt = $this->connect()->prepare($sql);
        $stmt->execute();
        $results = $stmt->fetchAll();
        echo $this->sumCase; //returns null, how do I pass variables between methods?
    }

当我在此方法中回显我的 sumCase 数组时,它返回 null。如何通过 getEvents 方法访问 sumCase 数组的值?

【问题讨论】:

  • 您是否打算在为$sumCase 赋值时使用方括号将其放入数组中?这会影响你回应它的能力。
  • 请提取minimal reproducible example 并将其包含在您的问题中。另请注意,尚不清楚为什么将其存储在成员中并返回其格式为print_r() 的内容。作为这里的新用户,也请带上tour并阅读How to Ask
  • 您是否在同一对象上下文中使用 $sumCase 变量来调用两个函数?
  • @MartinZeitler 是的,提问者还没有清楚他的查询中的所有内容
  • 使用属性时不需要return 任何东西。

标签: php class methods


【解决方案1】:

如果函数 getEvents 没有被首先调用或者它被调用到不同的对象实例,则返回 null。

<?php

use directory_with_classes\Player;

$player = new Player();
$player->getEvents();
$player->getPlayerEvents();

?>

【讨论】:

    【解决方案2】:

    按照我理解您的问题的方式,您需要访问在另一个方法中声明的方法中的变量。为了传递变量,您需要首先全局声明 $ ,然后在函数内部访问它。 示例:

        $foo = NULL; // Placeholder
        function seg() {
            $foo = "something";
        }
        function bar() {
            echo $foo; // You can now access it!
        }
    

    【讨论】:

    • 对不起,这是全局范围内的顺序代码,而主题是 OOP。
    猜你喜欢
    • 2013-10-30
    • 2018-08-08
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 2011-02-22
    • 2012-03-31
    • 2014-07-13
    • 2012-03-20
    相关资源
    最近更新 更多