仍然习惯了PHP课程,所以请“帮助/指导”
我有一个这样的课程:
class ansa_accounturl_query {
function __construct() {
global $DBH;
global $limit;
$STH = $DBH->query("SELECT frm_url.frm_urlID,frm_url.frm_url FROM frm_url WHERE frm_url.accountID='SOMETHING' ".$limit." ");
$STH->setFetchMode(PDO::FETCH_OBJ);
$this->noforms = $STH->rowCount();
while($row = $STH->fetch()):
$this->frm_urlID[] = $row->frm_urlID;
$this->frm_url[] = $row->frm_url;
endwhile;
}
}
限制来自PHP函数 - 并且有效。
我真正想要做的是为上面的例子创建扩展类,它将$this-frm_url
作为一个函数。所以在“页面”上我调用了类$classcall = new class();
,而不是必须去echo $classcall->frm_url[$key];
我可以调用这样的函数echo frm_url();
所以在上面的例子中会有2个扩展一个用于frm_urlID,一个用于frm_url。
另外,在“大师班”中我是否正确设置为数组?即$this->frm_url[]
如果没有我似乎无法运行循环但是循环看起来似乎“过度”复杂如果你这样做,因为你(我)必须得到数组项目的计数然后运行循环所以你(我再次)有一个for()
语句,然后是foreach()
。似乎对我很感兴趣。
谢谢你。
答案 0 :(得分:2)
第一: 请不要使用全局变量。 如果你必须使用“全球”,那么你的设计有90%的可能性是坏的。 将$ DBH和$ limit作为参数传递给__construct($ dbh,$ limit)或将它们定义为ansa_accounturl_query的静态属性。 如果将它们定义为静态属性,则对于类的所有实例,值仍然相同。
第二: 如果要在不创建实例的情况下调用方法,则可以将方法声明为static。然后你可以像这样打电话给他们:
classname::myMethod(parameter);
如果你总是使用相同的db和相同的设置,我建议你用静态属性和3个静态方法创建一个类。
答案 1 :(得分:0)
我真正想做的是 为上面创建扩展类 给出$ this-frm_url的例子 作为一个功能。所以在“页面”我 调用类$ classcall = new 类();但不必去 echo $ classcall-> frm_url [$ key];我可以 只需调用类似这个echo的函数 frm_url();所以在上面的例子中 将有2个扩展类一个 用于frm_urlID,另一个用于frm_url。
echo frm_url();
无效。除非您定义类似
$classcall->frm_url[$key];
function frm_url($key){
if (!$key) $key = 0;
$classcall = new ansa_accounturl_query();
return $classcall->frm_url[$key];
}
答案 2 :(得分:0)
<?php
class ansa_accounturl_query {
private static $FIND_ALL_QUERY = "SELECT frm_url.frm_urlID,frm_url.frm_url FROM frm_url WHERE frm_url.accountID='SOMETHING' %s";
private $dbh;
public function __construct( $dbh ) {
$this->dbh = $dbh;
}
public function findUrls() {
$query = $this->dbh->query(vsprintf($queryString, array( func_get_args() ) ) );
$query->setFetchMode(PDO::FETCH_OBJ);
$result = array();
$result["count"] = $query->rowCount();
$result["records"] = array();
while( null !== ( $row = $query->fetch() ) ) {
$result["records"][] = array(
"id" => $row->frm_urlID,
"url" => $row->rm_url
);
}
return $result;
}
}
$ansaQuery = new ansa_accounturl_query($DBH);
$result = $ansaQuery->findUrls();
foreach ( $result['records'] as $row ) {
print sprintf("ID: %d; URL: %s", $row['id'], $row['url']);
}
print sprintf("URLs count: " . $result['count'] );