Использование $ this, если не в объектном контексте

возможно, это рано утром, или я полностью слеп, но почему я получаю «Неустранимая ошибка: использование $ this, если не в контексте объекта» в следующем коде. Там нет ничего статического.

Класс:

<?php class Property { /** * @var string[] */ private $values; public function __contruct($file) { $this->values = parse_ini_file($file, false); } /** * @return string */ public function get($key, $default = null) { if (key_exists($key, $this->values)) { //<-- error return $this->values[$key]; } return $default; } } 

Тест:

 <?php class PropertyTest extends Test { public function testGet() { $prop = new Property($this->getResource('test.properties')); $this->assertEquals('foo', $prop->get('test.entry', 'xyz')); $this->assertEquals('bar', $prop->get('test.entry2', 'xyz')); $this->assertEquals('xyz', $prop->get('test.entry3', 'xyz')); $this->assertEquals(null, $prop->get('test.entry3')); } } 

редактировать

Комментарии об ошибке, указывающие на трассировку. Ошибка возникает при запуске PropertyTest-> testGet () в первом $ prop-> get (), вызванном первой строкой метода Property-> get ().

Решение

Помимо найденной опечатки xdazz, и усталость Фила указала на, user985935 был прав. 🙂

Короче говоря, мой загрузчик классов использовал статический get, а ошибка phpUnit вводила в заблуждение мои исследования и мою информацию, которую я предлагаю вам для поиска моей проблемы. Сожалею.

«Неустранимая ошибка: использование $ this, если не в контексте объекта»

Это ключевое слово $ указывает на методы, которые находятся внутри объекта, но вы не можете использовать $ this вне объекта. Я думаю, что это то, что вызывает вашу проблему

В вашем коде есть опечатка.

 public function __contruct($file) 

которые должны быть

 public function __construct($file)