class 内的 PDO 请求
PDO request within a class
这是我的 class :
class ProfileLink {
function profileLink(PDO $pdo, $string, $i=0)
{
if ($i!=0) {
$link = $string . '-' . $i;
} else {
$link = $string;
}
$req = $pdo->prepare('SELECT link FROM users WHERE link = ?');
$req->execute(array($link));
$nb = $req->rowCount();
$req->closeCursor();
if ($nb > 0) {
$i++;
return profileLink($pdo, $string, $i);
} else {
return $link;
}
}
}
当我从 class 调用 profileLink 函数时,它不起作用,但如果我在 class 之外调用它,一切正常。可能是PDO的问题,你怎么看?
require_once ('lib/profileLink.class.php');
$profileLink = new ProfileLink();
$link = $profileLink->profileLink($pdo, $string);
我会将 PDO 实例存储为 class 属性,以便可以在 class 中轻松访问它。请注意,我的示例使用的语法略有不同(现代 PHP)。
class ProfileLink {
protected $pdo;
public function __construct(PDO $pdo) {
$this->pdo = $pdo;
}
public function profileLink($string, $i=0)
{
if ($i!=0) {
$link = $string . '-' . $i;
} else {
$link = $string;
}
$req = $this->pdo->prepare('SELECT link FROM users WHERE link = ?');
$req->execute(array($link));
$nb = $req->rowCount();
$req->closeCursor();
if ($nb > 0) {
$i++;
return profileLink($string, $i);
} else {
return $link;
}
}
}
$profileLink = new ProfileLink($pdo);
2 件事:
这里
return profileLink($pdo, $string, $i);
您缺少 $this
,因为它不是常规函数,而是 class 方法:
return $this->profileLink($pdo, $string, $i);
其次,您的方法与 class 同名(第一个大写字母除外),因此似乎被解释为构造函数。我刚刚测试了这个:
class Test {
function test() {
echo "test";
}
}
$t = new Test();
并输出 "test"
.
所以您应该将您的方法重命名为 getLink
或类似的名称。
这是我的 class :
class ProfileLink {
function profileLink(PDO $pdo, $string, $i=0)
{
if ($i!=0) {
$link = $string . '-' . $i;
} else {
$link = $string;
}
$req = $pdo->prepare('SELECT link FROM users WHERE link = ?');
$req->execute(array($link));
$nb = $req->rowCount();
$req->closeCursor();
if ($nb > 0) {
$i++;
return profileLink($pdo, $string, $i);
} else {
return $link;
}
}
}
当我从 class 调用 profileLink 函数时,它不起作用,但如果我在 class 之外调用它,一切正常。可能是PDO的问题,你怎么看?
require_once ('lib/profileLink.class.php');
$profileLink = new ProfileLink();
$link = $profileLink->profileLink($pdo, $string);
我会将 PDO 实例存储为 class 属性,以便可以在 class 中轻松访问它。请注意,我的示例使用的语法略有不同(现代 PHP)。
class ProfileLink {
protected $pdo;
public function __construct(PDO $pdo) {
$this->pdo = $pdo;
}
public function profileLink($string, $i=0)
{
if ($i!=0) {
$link = $string . '-' . $i;
} else {
$link = $string;
}
$req = $this->pdo->prepare('SELECT link FROM users WHERE link = ?');
$req->execute(array($link));
$nb = $req->rowCount();
$req->closeCursor();
if ($nb > 0) {
$i++;
return profileLink($string, $i);
} else {
return $link;
}
}
}
$profileLink = new ProfileLink($pdo);
2 件事:
这里
return profileLink($pdo, $string, $i);
您缺少 $this
,因为它不是常规函数,而是 class 方法:
return $this->profileLink($pdo, $string, $i);
其次,您的方法与 class 同名(第一个大写字母除外),因此似乎被解释为构造函数。我刚刚测试了这个:
class Test {
function test() {
echo "test";
}
}
$t = new Test();
并输出 "test"
.
所以您应该将您的方法重命名为 getLink
或类似的名称。