Php 使用对象运算符循环

Php 使用对象运算符循环,php,mysql,loops,calendar,operators,Php,Mysql,Loops,Calendar,Operators,我正在和(Corey Worrell)玩游戏,对实例循环有一个问题。为了初始化日历,我必须输出以下内容: $calendar->standard('today') ->standard('prev-next') ->standard('holidays') ->attach($event1) ->attach($event2) ->attach($event3) -

我正在和(Corey Worrell)玩游戏,对实例循环有一个问题。为了初始化日历,我必须输出以下内容:

$calendar->standard('today')
        ->standard('prev-next')
        ->standard('holidays')
        ->attach($event1)
        ->attach($event2)
        ->attach($event3)
        ->attach($event4)
        ->attach($event5)
        ->attach($event6)
        ->attach($event7)
        ->attach($event8)
        ->attach($event9)
        ->attach($event10)
        ->attach($event11)
        ->attach($event12)
        ->attach($event13)
        ->attach($event14)
        ->attach($event15)
        ->attach($event16)
        ->attach($event17);
每个->attach($event#)在日历上输出一个事件。我想循环这些以数字递增的事件名称,但在代码中的任意位置添加for循环会破坏一切,输出以下错误:

PHP可捕获致命错误:参数1传递给 Event_Subject::attach()必须是Event_Observer的实例,null 给定,在第75行的/calendar/index.php中调用,并在中定义 /第21行的calendar/classes/event_subject.php

以下是我尝试过的循环:

$calendar->standard('today')
        ->standard('prev-next')
        ->standard('holidays')
        for ($inc = 0; $inc <= $number_of_events; $inc++) {
            if ($inc == $number_of_events) {
                ->attach($$event_name);
            }
            else {
                ->attach($$event_name)
            }
        }
$calendar->standard('today')
->标准('prev-next')
->标准(节假日)
对于($inc=0;$inc附加($$event\u name);
}
否则{
->附加($$event\u name)
}
}

我如何在这里循环?我的事件存储在MySQL中,我正在执行$number\u of_events=$result->num\u rows来确定返回的事件数。->attach($event#)将循环,重复,直到达到事件总数。

这称为方法链接。类的每个方法通过
$this
返回被调用对象的实例,允许您堆叠方法调用。方法链接是可能的,因为函数返回对对象的引用

因为类中支持方法链接的每个函数都返回调用对象,所以您可以将返回的对象重新分配回原始的
$calander
变量

 for ($inc = 0; $inc <= $number_of_events; $inc++) {
        if ($inc == $number_of_events) {
            $calander = $calander->attach($event1);
        }
        else {
            $calander = $calander->attach($event1);
        }
    }

因此,这将成为
$event0、
$event1
$event2
,等等。

称为方法链接。类的每个方法都通过
$this
返回被调用对象的实例,允许您堆叠方法调用。方法链接是可能的,因为函数返回对对象的引用

因为类中支持方法链接的每个函数都返回调用对象,所以您可以将返回的对象重新分配回原始的
$calander
变量

 for ($inc = 0; $inc <= $number_of_events; $inc++) {
        if ($inc == $number_of_events) {
            $calander = $calander->attach($event1);
        }
        else {
            $calander = $calander->attach($event1);
        }
    }

因此,这将成为
$event0、
$event1
$event2
,等等。

循环的问题是
->
运算符前面没有任何内容。
->
引用对象的属性,但您没有为其提供对象。您可以通过将
$calendar
放入f中来解决它这是一个孤独的操作符(
$calendar->…
),但它仍然不是很漂亮的代码

我建议这样做:

我想你可以在循环中一个接一个地添加事件,我假设你已经在使用它来创建
$event1
$event2
,等等。我不知道你用什么从数据库中获取数据,或者你的表结构是什么样的,但是我将为MySQLi提供一个示例。它应该很容易修改r替代品

//Add the standards.
$calendar->standard('today')
    ->standard('prev-next')
    ->standard('holidays');

//Connect to the database here and query for the events using MySQLi.

//Loop through the results.
while($row = $result->fetch_assoc()) {
    //Create an event from the database row...
    $event = calendar->event()
         ->condition('timestamp', $row['TIMESTAMP'])
         ->title('Hello All', $row['TITLE'])
         ->output('My Custom Event', $row['OUTPUT']);
    //...and attach it.
    $calendar->attach($event);
}
这不是直接复制粘贴的代码,而是关于如何组织它的建议


另外,对于将来,您不应该命名变量
$name1
$name2
等,然后使用
$
来引用它们。请改用。

循环的问题是
->
操作符前面没有任何内容。
->
引用对象的属性,但您没有为它提供一个对象。您可以通过将
$calendar
放在寂寞的操作符前面(
$calendar->…
)来解决它,但它仍然不是非常漂亮的代码

我建议这样做:

我想你可以在循环中一个接一个地添加事件,我假设你已经在使用它来创建
$event1
$event2
,等等。我不知道你用什么从数据库中获取数据,或者你的表结构是什么样的,但是我将为MySQLi提供一个示例。它应该很容易修改r替代品

//Add the standards.
$calendar->standard('today')
    ->standard('prev-next')
    ->standard('holidays');

//Connect to the database here and query for the events using MySQLi.

//Loop through the results.
while($row = $result->fetch_assoc()) {
    //Create an event from the database row...
    $event = calendar->event()
         ->condition('timestamp', $row['TIMESTAMP'])
         ->title('Hello All', $row['TITLE'])
         ->output('My Custom Event', $row['OUTPUT']);
    //...and attach it.
    $calendar->attach($event);
}
这不是直接复制粘贴的代码,而是关于如何组织它的建议


此外,对于将来,您不应该命名变量
$name1
$name2
等,然后使用
$
引用它们。请改用。

以下是解决方案。不确定为什么将此更改为引用$calendar每一行都有效,但确实有效。谢谢大家

$calendar->standard('today');
$calendar->standard('prev-next');
$calendar->standard('holidays');

for ($x = 1; $x <= $number_of_events; $x++) {
    $event_name = "event".$x;
    $calendar->attach($$event_name);
}
$calendar->standard('today');
$calendar->standard('prev-next');
$calendar->standard(“假日”);
对于($x=1;$x附加($$event\u name);
}

这是解决方案。不确定为什么要将此更改为reference$calendar每行都有效,但确实有效。谢谢大家

$calendar->standard('today');
$calendar->standard('prev-next');
$calendar->standard('holidays');

for ($x = 1; $x <= $number_of_events; $x++) {
    $event_name = "event".$x;
    $calendar->attach($$event_name);
}
$calendar->standard('today');
$calendar->standard('prev-next');
$calendar->standard(“假日”);
对于($x=1;$x附加($$event\u name);
}

您尝试使用的循环看起来像什么?更新了问题以显示循环代码。为什么您要使用名为
$event1
$event2
等的变量而不是将它们放入循环中?我正在从数据库中提取它们,@Don'tPanic。您尝试使用的循环看起来像什么?更新了问题以显示循环代码。您为什么要使用名为
$event1
$event2
等的变量,而不是将它们放入一个?我正在从数据库中提取它们,@Don'tPanic。我喜欢你对方法链接的解释,在特定情况下使用变量是有意义的,但是你代码中的if和else分支似乎在做完全相同的事情,而且在不使用方法链接的情况下附加事件时,可能没有必要将
$calendar
重新分配给自身。编辑之前,您的帖子使我重试了该解决方案。我将为此奖励您接受的答案。谢谢您!@sheldon很高兴我能成为其中的一员help@Don不要惊慌:你说得绝对正确。