php函数调用中的下划线

时间:2010-01-28 06:50:26

标签: php oop

我知道PHP中函数名称的下划线用于“隐式”表示它们应该是私有的......但我刚看到这段代码:

class DatabaseConnection
{
  public static function get()
  {
    static $db = null;
    if ( $db == null )
      $db = new DatabaseConnection();
    return $db;
  }

  private $_handle = null;

  private function __construct()
  {
    $dsn = 'mysql://root:password@localhost/photos';
    $this->_handle =& DB::Connect( $dsn, array() );
  }

  public function handle()
  {
    return $this->_handle;
  }
}

print( "Handle = ".DatabaseConnection::get()->handle()."\n" );
print( "Handle = ".DatabaseConnection::get()->handle()."\n" );

在这段代码中,变量中有下划线是什么意思?

4 个答案:

答案 0 :(得分:5)

方法和properties有点相同:约定相同:名称以一个下划线开头通常意味着它们被视为private/protected

(当然,对于名称以两个下划线开头的方法不一样:那些是magic methods,两个下划线不应该用于“普通”方法名称)< / em>的

答案 1 :(得分:1)

惯例通常是:

  • 一个下划线通常用于受保护/私有方法和变量,因此它们会突出显示
  • 两个下划线保留用于“魔术”方法,如__construct,__ get,__ set等,这些方法在语言中具有特殊含义,因此除非您编写已知的魔术方法,否则不应使用它。

这就是说,该语言没有为一个下划线名称赋予任何特殊含义,它只是一个约定 - 所以你不必把它变成私有的,而一些有其他语言背景的人用例如标记所有属性强调要将它们与方法区分开来。

答案 2 :(得分:0)

啊__construct是一种特殊的方法。 PHP是说构造函数的方式。他们从Python那里偷走了那些魔术方法。

实例化类时,会自动调用构造函数。

因此,如果您创建对象myconnection = DatabaseConnection(),它将自动调用:

$dsn = 'mysql://root:password@localhost/photos';
$this->_handle =& DB::Connect( $dsn, array() );

...构造函数中的代码。那么当你稍后调用get()时(注意它是静态的)它将有一个连接。

我有时会将该代码移动到另一个方法中,比如说connect()并在构造函数中调用它,所以我可以这样做。我认为绊倒你的真实事物是“静态”方法。那些不需要调用完全构造的对象。

答案 3 :(得分:0)

属性(变量)与方法(函数)一样具有可见性。