所以在我的PHP程序中,我正在创建一个日历功能,其中一个类是"日历日";。我想做的是能够为每一天的计数实例化一个新的日期,例如new CalendarDay (22)
意味着新的月22日。还有一个show()
函数用于显示每一天。类本身功能正常,但当我尝试使用递归实例化新的日子时,它似乎不再起作用,因为与实例化对象相关的一切都从网页中消失了。
class CalendarDay{
private $current_month;
private $current_year;
private $current_date;
public $reminderSet;
public $reminders;
public function __construct($current_day_of_month){
$current_year = date("Y");
$current_month = date("m");
$this->days_in_month = cal_days_in_month(CAL_GREGORIAN, $current_month, $current_year);
$this->current_date = date("d");
$this->current_day_of_month = $current_day_of_month;
}
public function show(){
$output = '<div class = "generator>"';
//$output .= $this->current_date;
//$output .= '<h1>' . $this->current_date . '</h1>';
$output .= '</div>';
$output .= $this->current_day_of_month;
echo $output;
}
}
我的递归尝试失败:
for ($countTo31 == 0; $countTo31 == 31; $countTo31++){
$holder = $countTo31;
$date = new CalendarDay ($holder);
$date->show();
}
作为参考,这个没有递归的原始代码块正常工作:
$holder = $countTo31;
$date = new CalendarDay ($holder);
$date->show();
我对你想要实现的目标感到非常困惑。。。
你有一个";"天";类,它接受输入来初始化特定的一天,但实际上是基于date("Y-m-d");
计算出当前的一天?。。然后输出输入日期?
老实说,这看起来更像是你想要一个";月份;目标
初始问题
-
您使用
==
来定义您的起点-
==
不是赋值运算符,它是一个比较运算符。 -
它有效地在循环开始时添加了循环的额外迭代
for($i == 1; $i < 5; $i++){ echo $i; } // Loop 1: // --> Notice on $i == 1 // --> Notice on $i < 5 // --> Notice on echo $i // --> Notice on $i++ // Loop 2: --> $i = 1 BECAUSE of the previous $i++ so the intended loop starts...
-
另外,在这种情况下,循环应该以1而不是0(!(开始
-
-
您使用
==
来定义您的条件-
for
循环像您的循环一样有效地工作:for ( A ; B ; C ){ // Do something... } // Loop works as: // Check A against B // If TRUE then "Do something..." // and then do C // IF FALSE then break
-
然而,即使你的分配(
A
(是正确的(即$countTo31 = 1
(,它仍然不会起作用,因为1 !== 31
和之前的循环breaks
从开始 -
应该是
$countTo31 <= 31
-
-
在对象上循环,重写变量
- 您的代码当前重写了包含每个循环的日期对象的变量
- 实际上,你创建了一个对象来输出当天的数据,并立即删除该对象,使其不能用于其他任何事情
-
您的HTML输出在错误的位置有一个
"
:$output = '<div class = "generator>"'; //Should be... $output = '<div class = "generator">';
-
类中的一些变量没有正确分配或声明
$current_month
已声明但从未赋值$current_year
已声明但从未赋值$current_day_of_month
已分配但未声明$days_in_month
已分配但未声明
临时解决方案
如果没有关于你打算做什么的进一步信息,就不可能提供良好/准确的指导,所以我将留下一个工作示例,告诉你该做什么:
$days_in_month = cal_days_in_month(
CAL_GREGORIAN,
date("m"),
date("Y")
);
for ($day = 1; $day <= $days_in_month; $day++){
echo "Day {$day}<br>";
}
提议的变更
看起来你并不是真的想要一个";"天";类,用于尝试实现的函数。因此,在我看来,最好先创建一个";月份;对象与一个月中的所有日子,然后使其生成一个";"天";对象,然后可以收集每天的信息,例如提醒。
通过这种方式,您可以在处理用户输入或数据库数据时每天进行更新。
class Month
{
private $month;
private $year;
private $days = [];
public function __construct($month, $year)
{
$this->month = $month;
$this->year = $year;
$number_of_days = cal_days_in_month(
CAL_GREGORIAN,
$month,
$year
);
for ($i = 1; $i <= $number_of_days; $i++){
$date = "{$this->year}-{$this->month}-{$i}";
// $days[] = new Day($date);
$this->days[$i] = new Day($date);
}
}
public function getDay($day)
{
return $this->days[$day];
}
public function getNumberOfDays()
{
return count($this->days);
}
}
class Day
{
private $date;
private $reminders = [];
public function __construct($date)
{
$this->date = $date;
// Initialise day...
# Get reminders
# Get meetings
# Get bills to pay
}
public function getReminders()
{
return $this->reminders;
}
public function setReminder($content, $time)
{
// Set reminders
$this->reminders[] = [
"content" => $content,
"time" => $time
];
}
public function show()
{
return date("d / m / Y", strtotime($this->date));
}
}
$month = new Month(12, 2020);
for ($i = 1; $i <= $month->getNumberOfDays(); $i++){
echo $month->getDay($i)->show()."<br>";
}