Bu ne anlama geliyor?

7 Cevap

T_PAAMAYIM_NEKUDOTAYIM gerçekten egzotik geliyor, ama kesinlikle kesinlikle saçma bana. Ben bu kod hatlarına tüm aşağı izlenebilmektedir:

<?php
Class Context {
    protected $config;

    public function getConfig($key) { // Here's the problem somewhere...
    $cnf = $this->config;
    return $cnf::getConfig($key);
    }

    function __construct() {
    $this->config = new Config();
    }
}
?>

Yapıcıda bir yapılandırma nesnesi oluşturun. İşte bir sınıf:

final class Config {
    private static $instance = NULL;
    private static $config;

    public static function getConfig($key) {
    return self::$config[$key];
    }

    public static function getInstance() {
    if (!self::$instance) {
        self::$instance = new Config();
    }
    return self::$instance;
    }

    private function __construct() {
    // include configuration file
    include __ROOT_INCLUDE_PATH . '/sys/config/config.php'; // defines a $config array
    $this->config = $config;
    }
}

Hiçbir fikrim neden bu hata ne demek / çalışmıyor ...

7 Cevap

T_PAAMAYIM_NEKUDOTAYIM çift kolon kapsam çözünürlük PHP kullanır thingy olduğunu - ::

Kodunuzu hızlı bir bakışta, ben bu satırı düşünüyorum:

return $cnf::getConfig($key);

olmalıdır

return $cnf->getConfig($key);

İlk statik bir yöntemi çağırmak için yoludur - $ cnf de geçerli bir sınıf bir dize içeriyorsa, bu kod geçerli olacaktır. -> Sözdizimi bir sınıf / nesne örneğinde bir yöntemi çağırmak içindir.

Bu sorun gelecek ziyaretçiler için sadece benim iki sent.

Eğer sınıf adı statik yöntemini çağırırsanız, bu örnek için PHP 5.3 için doğru yazım, bir:

MyClassName::getConfig($key);

Daha önce $ CNF değişkene SınıfAdı atarsanız, (biz PHP 5.3 bahsediyoruz) ondan statik yöntemini çağırabilirsiniz:

$cnf = MyClassName;
$cnf::getConfig($key);

Ancak, bu sözdizim PHP 5.2 veya daha az çalışmaz ve aşağıdaki kullanmanız gerekir:

$cnf = MyClassName;
call_user_func(array($cnf, "getConfig", $key, ...otherposibleadditionalparameters... ));

Bu insanlar (bu openfrog versiyonu olduğunu bilmiyorum) 5.2 sürümünde bu hatayı sahip yardımcı olur umarım.

Hata aşağı çift kolon operatör bir "uygunsuz kullanım" için:

return $cnf::getConfig($key);

Eğer sınıf statik yöntemi çağırmak için çalışıyor, ama bunun yerine bir örnekleme kullanılarak konum olarak (başkası olacaktır şüphesiz ifade bu daha iyi, ben yoruldum ;-))

Ben ne istiyorum olduğunu düşünüyorum:

return $cnf->getConfig($key);

Hala çift kolon kullanmanız gerekiyorsa o zaman PHP 5.3 + üzerinde emin olun sizin

Wikipedia'ya göre, bir "çift kolon" kapsam çözünürlük operatörü demektir.

http://en.wikipedia.org/wiki/Scope%5Fresolution%5Foperator

Bu :: operatör için isim

Wikipedia

Sizin örnekte

return $cnf::getConfig($key)

Muhtemelen olmalıdır:

return $cnf->getConfig($key)

Ve getConfig statik değil yapmak