#php
#php
Вопрос:
может быть, это раннее утро, или я полностью слеп, но почему я получаю «Фатальную ошибку: Использование $ 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 и устаревания, на которое указал Фил, пользователь985935 был прав. 🙂
Короче говоря, мой загрузчик классов использовал статический get, а ошибка PHPUnit вводит в заблуждение мои исследования и мою информацию, которую я предлагаю вам для поиска моей проблемы. Извините.
Комментарии:
1. Разве это не должно быть
array_key_exists()
?2. Просто тестирование, кажется, что
key_exists()
это допустимая функция, по крайней мере, в 5.3.6. Кроме того, не удается воспроизвести эту ошибку3. Что говорится в полном сообщении об ошибке, включая ссылки на файлы и строки?
4. @Phil Для обратной совместимости может использоваться следующий устаревший псевдоним: key_exists()
5. Я добавил объяснение к своим ссылкам на строки. Это очень странно, поскольку конструктор работает, а $prop-> get() определенно не является статичным.
Ответ №1:
В вашем коде опечатка.
public function __contruct($file)
который должен быть
public function __construct($file)
Комментарии:
1. Спасибо. В настоящее время я нахожусь на работе и не могу повторно протестировать его, но представляется весьма вероятным, что это может вызвать проблему. Так что это было действительно ранним утром 😉
Ответ №2:
‘Неустранимая ошибка: использование $ this вне контекста объекта’
Ключевое слово $ this указывает на методы, которые находятся только внутри объекта, вы не можете использовать $ this вне объекта, я думаю, это и есть причина вашей проблемы
Комментарии:
1. Это ошибка: ‘Неустранимая ошибка: использование $ this, когда не в контексте объекта’ итак, как бы вы проанализировали возвращенную ошибку тогда?
2. @BoltClock если бы вы проанализировали ошибку, а не просто основывали ее на коде, который пользователь разместил здесь, то есть на мысли о проблеме, мы можем не видеть ее непосредственно в том, что было опубликовано, но это может происходить где-то еще в приложении, я уже сталкивался с той же проблемой в нескольких своих разработках, и я сталкивался с этой ошибкой уже много раз. 😉
3. @daGrevis это просто вопрос того, как мы должны уметь анализировать вещи. хехехе. 😉