我期望这是我忽略的基本语法错误,但我无法弄清楚。
在PHP脚本中,我不断收到以下错误。
Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in [path]/scripts/users/database_connection.php on line 4
当用include_once()调用我连接数据库的脚本时,会发生这种情况。 我将脚本剥离为最基本的代码(保留了其他代码所需的内容),但它仍在调用此错误。
class UserDatabaseConnection
{
$connection = sqlite_open("[path]/data/users.sqlite", 0666);
public function lookupUser($username)
{
// rest of my code...
}
}
$udb = new UserDatabaseConnection;
?>
我为此苦了一段时间,只是想知道是否还有其他人可以发现我出了问题的地方。
你不能放
$connection = sqlite_open("[path]/data/users.sqlite", 0666);
课外建设。 您必须将该行放在函数或构造函数中,但不能将其放在现在的位置。
谢谢,我第一次尝试使用OOP。
@犀牛,没事。 @Lekensteyn做得非常出色,并向您展示了理想情况下应该如何做。
因术语function和method的混合而被低估,并且无法在类构造函数之外进行预设分配。
您不能在类构造中使用函数调用,应该在构造函数中初始化该值。
从有关类属性的PHP手册中:
This declaration may include an initialization, but this initialization must be a constant value--that is, it must be able to be evaluated at compile time and must not depend on run-time information in order to be evaluated.
工作代码示例:
class UserDatabaseConnection
{
public $connection;
public function __construct()
{
$this->connection = sqlite_open("[path]/data/users.sqlite", 0666);
}
public function lookupUser($username)
{
// rest of my code...
// example usage (procedural way):
$query = sqlite_exec($this->connection,"SELECT ...", $error);
// object oriented way:
$query = $this->connection->queryExec("SELECT ...", $error);
}
}
$udb = new UserDatabaseConnection;
?>
根据您的需求,protected或private对于$connection可能是更好的选择。 这样可以防止您意外关闭或弄乱连接。
在成员定义之前使用访问修饰符:
private $connection;
由于您无法在PHP的成员定义中使用函数调用,因此请在构造函数中进行操作:
public function __construct() {
$this->connection = sqlite_open("[path]/data/users.sqlite", 0666);
}
好的代码示例,不错,也很小。
在$ connection之前放置public,protected或private。