【问题标题】:OO PHP undefined variablesOO PHP 未定义变量
【发布时间】:2012-08-08 13:29:36
【问题描述】:

我正在尝试使用 OO PHP,但是当我尝试代码时,我收到错误消息,指出 dbhost、dbuser、dbpass 和 dbname 未定义。 Netbeans 还给我一个警告,说它们可能未初始化。 删除 static 关键字会给我一个错误,说 'Unexpected "$dbhost" '。 有谁知道我做错了什么?

<?php
class DatabaseManager {

private static $dbhost = 'localhost';
private static $dbuser = 'root';
private static $dbpass = '';
private static $dbname = 'app_db';

public static function getConnection(){
    $dbconn;
    try {
    $dbconn = new PDO('mysql:host='.$dbhost,'dbname='.$dbname,
    $dbuser, $dbpass);
    } catch (PDOException $e) {
        echo "Could not connect to database";
        echo $e;
        exit;
    }
    return $dbconn;

}

}
?>

【问题讨论】:

  • 与问题无关:您不必在 PHP 中声明变量,因此在方法的开头使用 $dbconn; 毫无意义(这根本没有效果)。

标签: php oop undefined


【解决方案1】:

您已将变量声明为静态。在 php 5.2 或更高版本中像这样引用它们:

$dbconn = new PDO('mysql:host='.self::$dbhost,'dbname='.self::$dbname,
                   self::$dbuser, self::$dbpass);   

在 PHP 5.3 或更高版本中,如果您将它们从私有设置为受保护,您也可以使用:

$dbconn = new PDO('mysql:host='.static::$dbhost,'dbname='.static::$dbname,
                   static::$dbuser, static::$dbpass);   

它们的行为相似,但如果您扩展类,静态关键字允许后期静态绑定。

【讨论】:

  • 由于成员变量被声明为私有,我不推荐使用static。否则可能会导致子类出现一些问题。
  • @Niko 看到我在静态示例上方的评论,这表明他应该从私有切换到受保护以使用静态。
  • 另一个简单的问题,PHP 处理变量范围的方式与 java 不同吗?在我上面的代码中 $dbconn;未使用,我可以返回在 try 中初始化的 dbconn 变量
  • @JackHurt 基本上是一样的。由于 php 没有包,因此使用 protected 关键字更简单。您可以在方法之外将 $dbconn 声明为静态受保护属性,并使用它而无需返回它。
  • @JackHurt 是的,有区别。 Java 具有块作用域,因此变量只定义在最近的一对大括号内。在 PHP 中它是一个函数作用域,这意味着一个变量总是在整个函数中定义(正如您可能已经从名称中猜到的那样 ^^)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-24
  • 2020-10-22
  • 2019-09-18
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
  • 2017-11-18
相关资源
最近更新 更多