所以我正在创建自己的个人日历Web应用程序,而且我遇到了函数中变量的问题。目前,我的应用程序开始抽出时间,找出今天的日期,日期和年份。
$year = date("Y",time());
$today = date("j",time());
$month = date("m",time());
稍后在应用程序中,我有一个“绘制”每个日历方块的功能。
function thisDay($input) {
date("m",mktime(0,0,0,$month,$input,$year));
echo //html stuff here;
}
现在我可以传递所有三个变量($ month,$ input,$ year),因为我在while循环中使用了该函数。但我之前在其他项目中遇到过这个问题。我有一个让我的生活更轻松的功能,但每次使用该功能时我都要传递六个变量,即使它们中的一些很少改变。
答案 0 :(得分:0)
当然,您可以通过使用全局变量来绕过将变量传递给函数的需要,但这是一个更糟糕的情况。
而是定义一个表示数据的类,并传递该类的实例。
类似的东西:
class My_Date {
public $year;
public $today;
public $month;
// ...any methods you need
}
然后,您可以创建此类的实例,并只传递该实例:
$my_date = new My_Date();
$my_date->year = date("Y",time());
$my_date->today = .... // and so on.
// then call your function:
my_function($my_date); // just pass the single argument
(更好地命名您的课程,您可能希望根据需要更改数据成员的可见性)
答案 1 :(得分:0)
如果您创建一个包含您用来传递的所有数据的类,那么您将获得一些好处:
class MyDate {
public $year,$month, $day;
}
function anyFunction(MyDate $date) {
//here you can use $date->day, $date->month, or $date->year
}
更新:
正如您可以在评论中看到的那样,使用DateTime
类已经足够了,但我的理解是,您在项目的不同时刻遇到了这个问题,所以这是一个很好的通用方法,所以你可以解决所有这些情况。
答案 2 :(得分:0)
Globals会做到这一点,但通常很好远离。在较大的程序中,您无法确定是否存在行为,因为它们可以在整个程序中的任何位置进行更改。使用全局变量的测试代码变得非常困难。
另一种方法是使用一个类。
class Test {
private $year = date("Y",time());
private $today = date("j",time());
private $month = date("m",time());
public function thisDay() {
//do your stuff
}
}
$obj = new Test();
$newvalue = $obj->thisDay();
答案 3 :(得分:-3)
您可以使用&
来确定变量。
这样的事情:
function thisDay($input) {
date("m",mktime(0,0,0,&$month,$input,&$year));
echo /*html stuff here*/; }
使用时要小心。如果您打算在此函数中更改此变量的值,请记住,您将直接在内存中更改其值。