【问题标题】:Is it possible to reference from one static variable to another (within classes)?是否可以从一个静态变量引用另一个(在类内)?
【发布时间】:2017-09-10 04:51:51
【问题描述】:

是否有可能在 PHP 类中从一个静态变量引用到另一个?

class EmployeeDAO
{
    private static $FIND_ALL = 'SELECT * FROM employee';

    private static $FIND_BY_NAME = self::$FIND_ALL . // This is not allowed!
        ' WHERE employee.name LIKE :name';
}

【问题讨论】:

    标签: php


    【解决方案1】:

    php 5.6 开始,你可以这样做:

    class EmployeeDAO
    {
        const FIND_ALL = 'SELECT * FROM employee';
    
        const FIND_BY_NAME = self::FIND_ALL .
            ' WHERE employee.name LIKE :name';
    }
    

    【讨论】:

    • 我明白了,将其设为私有的唯一方法是从 7.1 开始?
    • 如果我使用私有静态函数来实现它呢?是不是很诡异? PHP 开发者会诅咒我吗?
    【解决方案2】:

    实例化的类对象不能访问声明为静态的属性(尽管静态方法可以)。为了与 PHP 4 兼容,如果没有使用可见性声明,则属性或方法将被视为已声明为 public。

    PHP: Static Keyword - Manual

    【讨论】:

    • 如果我使用私有静态函数返回适当的字符串并相互引用呢?
    【解决方案3】:

    我不确定这是一种值得赞赏的方式,但我可以这样解决:

    private static function sql_findAll()
    {
        return 'SELECT * FROM employee';
    }
    
    private static function sql_findByName()
    {
        return self::sql_findAll() .
            ' WHERE employee.name LIKE :name';
    }
    

    【讨论】:

      猜你喜欢
      • 2016-06-26
      • 1970-01-01
      • 2015-10-04
      • 1970-01-01
      • 2012-09-06
      • 2017-09-09
      • 1970-01-01
      • 2012-12-21
      • 2015-09-25
      相关资源
      最近更新 更多