我开始上课并且有一个可变范围问题。我在一个函数中定义一个变量$ query,需要在第二个函数中使用它。但是,第二个功能是没有看到它。
我想我可以将$ query传递给类外部,然后传递它($ instance-> QueryExecute($ query);)。但这看起来很混乱,在课堂外不需要$ query。
解决这个问题的正确方法是什么?
谢谢你, 路易斯。
<?php
class MyProduct {
public function QueryBuild() {
$query = "SELECT * FROM my_product";
}
public function QueryExecute() {
$result = mysql_query($query);
while ($record = mysql_fetch_assoc($result)) {
foreach ($record AS $key => $value) {
$this->product[$record["pro_id"]][$key] = $value;
}
}
}
}
?>
答案 0 :(得分:0)
您在类中定义了一个属性,表示我想添加mysql_*
函数已弃用。
<?php
class MyProduct {
private $query;
public function QueryBuild() {
$this->query= "SELECT * FROM my_product";
}
public function QueryExecute() {
$result = mysql_query($this->query);
while ($record = mysql_fetch_assoc($result)) {
foreach ($record AS $key => $value) {
$this->product[$record["pro_id"]][$key] = $value;
}
}
}
}
?>
答案 1 :(得分:0)
有两种方法可以解决您的问题,第一种(在我看来)比另一种更好:
选项1:返回值
只需告诉构建方法返回值,然后在其他方法上使用它:
<?php
class MyProduct {
public function QueryBuild() {
$query = "SELECT * FROM my_product";
return $query;
}
public function QueryExecute() {
$result = mysql_query($this->QueryBuild());
while ($record = mysql_fetch_assoc($result)) {
foreach ($record AS $key => $value) {
$this->product[$record["pro_id"]][$key] = $value;
}
}
}
}
选项2:对象字段
您在类中定义了一个包含查询的字段。但是,这意味着在调用QueryBuild()
之前必须始终调用方法QueryExecute()
,这不是特别合理。
<?php
class MyProduct {
private $query;
public function QueryBuild() {
$this->query = "SELECT * FROM my_product";
}
public function QueryExecute() {
$result = mysql_query($this->query);
while ($record = mysql_fetch_assoc($result)) {
foreach ($record AS $key => $value) {
$this->product[$record["pro_id"]][$key] = $value;
}
}
}
}
有些注意事项:
mysql_*
个功能。它们已被弃用,已被MySQLi和PDO取代。