- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
<分区>
我对以 OOP 方式使用 PHP 还比较陌生。在我最新的项目中,我将创建一个站点,该站点将从 SQL 数据库加载大量条目,然后将这些条目发送到 View 以进行输出。
在摆弄如何以最佳方式做到这一点的同时,我创建了如下所列的代码:
class entryHandler {
//Store database connection
protected $database;
//List of all entries as multidimensional array fetched from SQL.
private $entriesSQL = array();
//List of all entries (as objects) will be stored in our $entries array
private $entriesObjects = array();
/*
*
* Upon construct
*
*/
public function __construct($database) {
//Check if database class has been passed correctly.
//Else we exit, since we can not function without it!
if (isset($database)) {
$this -> database = $database;
//Get events
if ($entriesSQL = $this -> getEventsFromSQL()) {
// Set SQL entries
$this -> setEntriesSQL($entriesSQL);
//And turn them into an array of objects
$this -> setEntryObjects();
}
else {
}
}
else {
echo 'No database connection has been established. Exiting execution.';
exit();
}
}
/*
* Setter for entriesSQL
*/
private function setEntriesSQL($entriesSQL) {
$this -> entriesSQL = $entriesSQL;
}
/*
* Getter for entriesSQL
*/
public function getEntriesSQL() {
return $this -> entriesSQL;
}
/*
* Setter for entry objects
*
*/
private function setEntryObjects() {
foreach ($this -> getEntriesSQL() as $key => $val) {
//entryID, entryUserID, entryTitle, entryTimeStart, entryTimeEnd
array_push($this -> entriesObjects, new entry($val['entryID'], $val['entryUserID'], $val['entryTitle'], $val['entryTimeStart'], $val['entryTimeEnd']));
}
}
/*
*
* Getter for entry objects
*
*/
public function getEntryObjects() {
return $this -> entriesObjects;
}
/*
*
* This function grabs events from SQL and return multidimensional-array of content.
*
*/
private function getEventsFromSQL() {
//Define the SQL query
$SQL = '...snippet...';
if ($entriesSQL = $this -> database -> read($SQL)) {
//Entries collected, return them.
return $entriesSQL;
}
else {
//Error occured. Log it and return false.
return false;
}
}
}
class entry {
var $entryID;
var $entryUserID;
var $entryTitle;
var $entryTimeStart;
var $entryTimeEnd;
public function __construct($entryID, $entryUserID, $entryTitle, $entryTimeStart, $entryTimeEnd) {
$this -> setEntryID($entryID);
$this -> setEntryUserID($entryUserID);
$this -> setEntryTitle($entryTitle);
$this -> setEntryTimeStart($entryTimeStart);
$this -> setEntryTimeEnd($entryTimeEnd);
}
/*
* Setter for entryID
*/
private function setEntryID($entryID) {
$this -> entryID = $entryID;
}
/*
* Getter for entryID
*/
public function getEntryID() {
return $this -> entryID;
}
/*
* Setter for entryUserID
*/
private function setEntryUserID($entryUserID) {
$this -> entryUserID = $entryUserID;
}
/*
* Getter for entryUserID
*/
public function getEntryUserID() {
return $this -> entryUserID;
}
/*
* Setter for entryTitle
*/
private function setEntryTitle($entryTitle) {
$this -> entryTitle = $entryTitle;
}
/*
* Getter for entryTitle
*/
public function getEntryTitle() {
return $this -> entryTitle;
}
/*
* Setter for entryTimeStart
*/
private function setEntryTimeStart($entryTimeStart) {
$this -> entryTimeStart = $entryTimeStart;
}
/*
* Getter for entryTimeStart
*/
public function getEntryTimeStart() {
return $this -> entryTimeStart;
}
/*
* Setter for entryTimeEnd
*/
private function setEntryTimeEnd($entryTimeEnd) {
$this -> entryTimeEnd = $entryTimeEnd;
}
/*
* Getter for entryTimeEnd
*/
public function getEntryTimeEnd() {
return $this -> entryTimeEnd;
}
}
现在,“entryHandler”类从我的 Controller (在另一个 PHP 文件中)加载,如下所示:
//Instantiate calenderHandler and pass our database handler to it.
$entryHandler = new entryHandler($database);
//Load template
$template -> calendarEntries = $this -> renderEntries($entryHandler -> getEntryObjects());
/*
*
* This functions renders entries content for view.
* Returns string with content.
*
*/
private function renderEntries($entries) {
$entriesContent = '';
foreach ($entries as $entry) {
$entriesContent .= '{
title: "' . $entry -> getEntryTitle() . '",
start: "' . $entry -> getEntryTimeStart() . '",
end: "' . $entry -> getEntryTimeEnd() . '"
}, ';
}
//Right trim entries string, so that we do not add trailing comma to last entry in list.
$entriesContent = rtrim($entriesContent, ', ');
//And return content to parse it to view.
return $entriesContent;
}
}
这是一个糟糕的设计模式吗?有什么我应该以另一种方式做的吗?这段代码中有某种冗余吗? - 我应该注意什么?
感谢大家的宝贵时间。
您好,菲舍尔
这是建议的解决方案(我确实搜索了相同的解决方案 - 没有成功) public abstract class AsyncCache { /** * an ato
在挖掘一些旧的源代码时,我看到了以下内容: my $module = $some{module}; eval "require $module"; die "Bad module\n$@" if $@
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 3年前关闭。 锁定。这个问题及其答案是loc
我设计了以下方法来捕获整个AS3应用程序中的错误: 在Document类中,定义以下方法: //This is the handler for listening for errors protect
我想知道是否有人看到任何可能导致此代码出现问题的内容。我知道我可以使用其他方法/API 调用来完成此操作,但我正在尝试为我自己的平台独立性奠定基础?/跨平台互斥框架。 显然我需要做一些#ifdef 并
我一直在阅读大量有关实现响应式移动下拉菜单的不同方法的资料。纯 CSS 解决方案对我来说似乎有点笨拙,但我讨厌依赖 javascript 来处理像导航菜单这样重要的事情。我想到的是使用 javascr
我即将构建我的第一个基于 Lisp 的严肃项目:一个需要扩展到数以万计的用户(不是同时的 - 最多可能是数百个同时)的 Web 应用程序。 我打算使用的堆栈如下所示: Weblocks具有 Berke
我正在寻找 PerlCritic 的等价物对于 PHP。 PerlCritc 是一个静态源代码分析器,它对代码进行 qritiques,并就从未使用的变量到处理数据的不安全方式到几乎所有内容的所有内容
我正在编写一个 perl 脚本,该脚本需要在调用外部程序之前设置许多环境变量。我的代码有形式 $ENV{'VAR1'} = "value1"; $ENV{'VAR2'} = "value2
我是一名优秀的程序员,十分优秀!