【问题标题】:constructor does not set member variables, but declares new [closed]构造函数不设置成员变量,而是声明 new [关闭]
【发布时间】:2019-12-24 11:44:25
【问题描述】:

我正在尝试使用基于外部文本文件的对象构建一个数组。 但是类的构造函数并没有设置类的成员变量。 相反,它使用值的名称声明新变量。

我做错了什么?

输出

Array
(
    [0] => slgDate Object
        (
            [date] => 
            [day] => 
            [info] => 
            [13.01.2020] => 13.01.2020
            [Mon] => Mon
            [] => 
        )

    [1] => slgDate Object
        (
            [date] => 
            [day] => 
            [info] => 
            [10.02.2020] => 10.02.2020
            [Mon] => Mon
            [] => 
        )
//...
)

代码

class slgDate {
    public $date, $day, $info;

    function __construct($date, $day, $info = "Training") {
        $this->$date = $date;
        $this->$day = $day;
        $this->$info = $info;
    }
}

function getDates($f) {

    $file = fopen($f, "r");
    $dates = [];
    while (!feof($file)) {
        $fileGet = trim(fgets($file), "\r\n");
        $expld = explode(';', $fileGet);
        if (($date = strtotime($expld[0])) !== false) {
            $info = $expld[1];
            $strDate = date('d.m.Y', $date);
            $strDay = date('D', $date);
            $newDate = new slgDate($strDate, $strDay, $info);
            array_push($dates, $newDate);
        }
    }
    return $dates;
}

【问题讨论】:

  • 更改您的属性分配以删除箭头运算符后的$

标签: php class oop


【解决方案1】:

您必须在没有前导 $ 的情况下访问成员属性:

所以这意味着:

$this->date

而不是

$this->$date

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多