2015-11-12 2 views
1

пытается понять что-то. У меня есть класс Config, где я определяю нагрузку констант. В одном из моих других классов мне нужно использовать одну из констант из Config. Поэтому я начинаю с помощью классаComposer Project, доступ к различным классам

use \CONFIG\Config; 

В моем конструктор класса, я затем присвоить класс переменной

public function __construct() { 
    $config = new Config; 
} 

В consturctor, я могу затем получить доступ к постоянным, делая что-то например,

$config::BASE_PATH; 

Так что, похоже, у меня нет жалоб при этом. Если я создаю переменный класс, хотя, и изменить свой конструктор к следующим

public function __construct() { 
    $this->config = new Config; 
    $this->config::BASE_PATH; 
} 

Он жалуется, что он использует неправильный доступ к статическому члену класса.

Почему он работает как локальная переменная, но не как переменная класса?

Thanks

+0

Хух. '::' не указан на странице приоритета оператора на php.net. Я предполагаю, что разрешение области действия происходит до применения '->'. – Jerry

+0

Возможный дубликат [Доступ к константам класса PHP] (http://stackoverflow.com/questions/5447541/accessing-php-class-constants) –

ответ

1

Вопрос не связан с композитором. Его синтаксическая проблема PHP при доступе к константам класса.

Синтаксис $this->myclass::CONSTANT для доступа к классу постоянной не поддерживается в PHP версии ниже PHP 7.

DEMO

<?php 
class MyClass 
{ 
    const CONSTANT = 'constant value'; 

    function showConstant() { 
     echo self::CONSTANT . "\n"; 
    } 
} 

echo MyClass::CONSTANT . "\n"; 

$classname = "MyClass"; 
echo $classname::CONSTANT . "\n"; // As of PHP 5.3.0 

class B 
{ 
    function __construct() 
    { 
     $this->myclass = new MyClass(); 
     $this->myclass->showConstant(); 

     /** 
     * #### This will not work in PHP Version below PHP 7! #### 
     */ 
     echo $this->myclass::CONSTANT; 
    } 
} 

$b = new B; 
?> 
Смежные вопросы