【问题标题】:PHP - Global Variable inside Class - To be accessed within internal functionsPHP - 类内的全局变量 - 在内部函数中访问
【发布时间】:2014-04-04 04:02:50
【问题描述】:

我正在为学校做一个项目,我是第一次使用 laravel 框架。我遇到了一个小问题,我被困了好几天,尝试了很多不同的方法 - 没有任何效果。

我已经构建了一个时间函数,它将接受多个参数,然后通过 while 循环检查数据库,然后将所有结果添加到“全局”数组中,然后另一个函数将测试该全局数组并检查其中的值。

我遇到的问题是我无法让函数正确访问全局数组:

我在网上尝试了很多不同的想法,但无法获取类的内部函数来访问全局数组 -

有人知道一个简单的方法吗?谢谢

尝试过(在最顶端 - 在课堂之前,也在顶部的课堂内)

$Global['ScheduleTest'] = array();

global $ScheduleCheck = array();

(inside class ) private $ScheduleCheck = array();

完整代码:::::::

<?php

global $ScheduleCheck = array() ;

class CourseRegistrationController extends BaseController {

public function __construct() {
    $this->beforeFilter('csrf', array('on'=>'post'));
}

.....

// Function to test time overlaps

function testTimeOverlap($course ,$regday, $start_time,$end_time)
    {
        $start_time1 = (substr($start_time, 0, 5)) ;
        $end_time1 = (substr($end_time, 0, 5)) ;

        $ScheduleArr = makeSchedule();

        $reg_days = explode(",",$regday);

        foreach ($reg_days as $rday)
        {
            foreach ($ScheduleArr as $schedule)
            {

                if((strtolower($rday))==(strtolower($schedule['day'])))
                {

                    $start_time2 = (substr($schedule['stime'], 0, 5)) ;
                    $end_time2 = (substr($schedule['etime'], 0, 5)) ;

                    if(testTime($start_time1,$end_time1,$start_time2,$end_time2))
                    {
                        array_push($ScheduleCheck, array("course"=>$course,"value"=>"true","day"=>$rday ));
                    }
                  else
                  {
                    array_push($ScheduleCheck, array("course"=>$course,"value"=>"false","day"=>$rday ));
                  }

                }
                else
                {
                    array_push($ScheduleCheck, array("course"=>$course,"value"=>"true","day"=>$rday ));
                }

            }

        }
    }


// Another function to go through the global array

function finalTimeTest()
    {
        testNewTime((strtolower(Input::get('course_id'))),(strtolower(Input::get('lecture_id'))),(strtolower(Input::get('tutorial_id'))),(strtolower(Input::get('lab_id'))));

        foreach($ScheduleCheck as $ckTime)
        {
            if($ckTime['value']=="true")
            {
                return true;
            }
            else
            {
                return ($ckTime['course']." ");
            }
        }
    }

?>

【问题讨论】:

  • 仅供参考:您通过引入 global 关键字打破了OOP 的概念。
  • 尝试了其他方法,例如在顶部设置私有变量等...不起作用
  • 不要使用 global 变量,而是可以创建成员 public,这样它们也可以在类外访问。
  • 试过 public static $ScheduleCheck; - 也不起作用

标签: php arrays laravel global-variables


【解决方案1】:

这些“函数”应该被定义为类的方法。

class ScheduleChecker {

    protected $scheduleCheck = array();

    // Your functions should be placed in here!

    public function getScheduleCheck()
    {
        return $this->scheduleCheck;
    }

}

然后您可以从方法内部引用该属性。

public function finalTimeTest()
{
    // Using $this to call the testNewTime method.
    $this->testNewTime((strtolower(Input::get('course_id'))),(strtolower(Input::get('lecture_id'))),(strtolower(Input::get('tutorial_id'))),(strtolower(Input::get('lab_id'))));

    // Using $this to get the scheduleCheck property.
    foreach($this->scheduleCheck as $ckTime)
    {
        if($ckTime['value']=="true")
        {
            return true;
        }
        else
        {
            return ($ckTime['course']." ");
        }
    }
}

您可能希望将此绑定到 Laravel 的容器(在 app/start/global.php 中):

App::instance('schedule', new ScheduleChecker);

然后,在您的控制器中,获取$scheduleCheck 属性:

$scheduleCheck = App::make('schedule')->getScheduleCheck();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    相关资源
    最近更新 更多