Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从动态数据库记录集创建新的php对象_Php_Oop - Fatal编程技术网

如何从动态数据库记录集创建新的php对象

如何从动态数据库记录集创建新的php对象,php,oop,Php,Oop,我正在从事一个php工作日历项目。这就是我试图做的:查询数据库并获取我得到的部分的计划信息,获取这些信息并基于每个记录集创建一个作业对象,然后我需要按部门和开始日期/时间对对象进行排序,然后根据部门和时间将它们显示在动态表中。我已经走了这么远: <?php session_start(); include_once("functions.php"); class jobs { //a job has a: private $eachJob; private $gr

我正在从事一个php工作日历项目。这就是我试图做的:查询数据库并获取我得到的部分的计划信息,获取这些信息并基于每个记录集创建一个作业对象,然后我需要按部门和开始日期/时间对对象进行排序,然后根据部门和时间将它们显示在动态表中。我已经走了这么远:

<?php 
session_start();
include_once("functions.php");
class jobs
{
    //a job has a:
    private $eachJob;
    private $group;
    private $jID;
    private $num;
    private $jStatus;
    private $description;
    private $startDate;
    private $endDate;
    private $startTime;
    private $endTime;
    private $rSpan;
    private $department;


    public function __construct()
    {
        $this->buildJob($_SESSION['dept']);
    }

    public function buildJob($depatment)
    {
        $captionHeading = 'Traditional Print';
        $conn = connect();

        $tsql = "select + 'Job# ' + CAST (JobNum AS VARCHAR(10)) as JobNum, Description, datediff(MI,StartTime, EndTime) / 15 as 'RowSpan', AssetName, 
        AssetID, Status.ColorCode as tdCC, JobID, StartTime, EndTime, datediff(day,getDate(),StartTime)*24*60/15 as 'Blank', getdate() as now
        from Calendar_View, Departments, Status, Assets
        where Departments.DepartmentName = '$depatment' and Calendar_View.Department = Departments.DepartmentID and AssetStatus = Status.StatusID and 
        Calendar_View.Asset = Assets.AssetID
        order by AssetID asc";

        $stmt = sqlsrv_query($conn, $tsql);
        if ($stmt)
        {
            while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) 
            {
            /*******************************
            $this->jobDetails = array(
                $this->group    = $row{'AssetName'},
                $this->jID          = $row['JobID'],
                $this->num          = $row['JobNum'],
                $this->jStatus      = $row['tdCC'],
                $this->description  = "now =" . date_format($row['now'],'Y-m-d'),
                $this->startDate    = date_format($row['StartTime'],'Y-m-d'),
                $this->endDate      = date_format($row['EndTime'],'Y-m-d'),
                $this->startTime    = date_format($row['StartTime'],'g:i'),
                $this->endTime      = date_format($row['EndTime'],'g:i'),
                $this->rspan        = "Time needed: " . $row['RowSpan']);
                $this->jobInfo($this->jobDetails);
            **********************************/
                $this->group        = $row{'AssetName'};
                $this->jID          = $row['JobID'];
                $this->num          = $row['JobNum'];
                $this->jStatus      = $row['tdCC'];
                $this->description  = "now =" . date_format($row['now'],'Y-m-d');
                $this->startDate    = date_format($row['StartTime'],'Y-m-d');
                $this->endDate      = date_format($row['EndTime'],'Y-m-d');
                $this->startTime    = date_format($row['StartTime'],'g:i');
                $this->endTime      = date_format($row['EndTime'],'g:i');
                $this->rspan        = "Time needed: " . $row['RowSpan'];
                //$this->jobInfo();
            }
        }
        else
        {
            die( print_r(sqlsrv_errors(), true));
        }
    }
    public function jobInfo()
    {

    }
}
/******************************
class job
{

}
******************************/
?>
我可以通过以下方式从另一个页面访问作业:

include_once("../php/job_class.php");
$obj=new  job("Traditional Print");
echo "<pre>";
echo print_r($obj);
echo "</pre>";

这只提供了从sql调用创建的对象。我曾尝试将其放入数组并将其传递给jobinfo函数,但这会给我一个数组数组,并造成混乱。我怎样才能完成我想做的事情呢?

你所有的财产都是私有的。加上对象名为jobs,您正在启动一个名为job的对象。另外,您的构造函数不接受传入变量,您正在尝试向其发送字符串。jobInfo也是一样,它没有任何传入参数,您试图向它发送一组值

要执行您试图执行的操作,您可以创建一个静态函数,返回一组作业对象。

您的排序问题

排序的最简单方法是在SQL查询中进行排序。因此可以将订单更改为按部门名称订购,StartTime

你的目标问题

不应该使用包含所有数据的jobs类,而应该创建一个job类,jobs类有许多job实例。也许是这样的:


查询后的while循环每次都会覆盖作业对象中的信息。您可能应该将查询内容放在jobFactory类或类似类中,并使用该类为每行创建一个对象。对不起,您是对的,我发布了我的编辑,现在我的代码工作了一半。谢谢你的意见。是的,我相信这正是我想要做的。我将尝试一下,稍后将在我的进度上发回。谢谢你抽出时间来帮忙!再次感谢。对你的建议稍作修改,我就有了一个工作目标。现在,我明白了为什么它会以这种方式输出结果,但我认为有一种更简单的方法。这给了我一个作业对象,其中包含一个包含作业对象数组的作业数组。我是通过一个稍微不同的代码结构到达这一点的。有没有办法清理输出?i、 e.从阵列阵列中逃离???没有抱怨的帮助,只是寻找更清洁和更清晰的输出来处理。
class job
{
    //a job has a:
    private $eachJob;
    private $group;
    private $jID;
    private $num;
    private $jStatus;
    private $description;
    private $startDate;
    private $endDate;
    private $startTime;
    private $endTime;
    private $rSpan;
    private $department;

    public __construct($row) {
        $this->group        = $row{'AssetName'};
        $this->jID          = $row['JobID'];
        $this->num          = $row['JobNum'];
        $this->jStatus      = $row['tdCC'];
        $this->description  = "now =" . date_format($row['now'],'Y-m-d');
        $this->startDate    = date_format($row['StartTime'],'Y-m-d');
        $this->endDate      = date_format($row['EndTime'],'Y-m-d');
        $this->startTime    = date_format($row['StartTime'],'g:i');
        $this->endTime      = date_format($row['EndTime'],'g:i');
        $this->rspan        = "Time needed: " . $row['RowSpan'];
    }
}

class jobs
{
    private $jobs = array();


    public function __construct()
    {
        $this->buildJob($_SESSION['dept']);
    }

    public function buildJob($depatment)
    {
        $captionHeading = 'Traditional Print';
        $conn = connect();

        $tsql = "select + 'Job# ' + CAST (JobNum AS VARCHAR(10)) as JobNum, Description, datediff(MI,StartTime, EndTime) / 15 as 'RowSpan', AssetName, 
    AssetID, Status.ColorCode as tdCC, JobID, StartTime, EndTime, datediff(day,getDate(),StartTime)*24*60/15 as 'Blank', getdate() as now
    from Calendar_View, Departments, Status, Assets
    where Departments.DepartmentName = '$depatment' and Calendar_View.Department = Departments.DepartmentID and AssetStatus = Status.StatusID and 
    Calendar_View.Asset = Assets.AssetID
    order by AssetID asc";

        $stmt = sqlsrv_query($conn, $tsql);
        if ($stmt)
        {
            while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) 
            {

            $this->jobs[] = new job($row);
            }
        }
        else
        {
            die( print_r(sqlsrv_errors(), true));
        }
    }

    public function jobInfo()
    {
        $jobArray = array();
        echo "<pre>";
        echo print_r("$jobArray[1]");
        echo "</pre>";
    }
}