也许是一大早或者我完全失明了,但为什么我会在下面的代码中得到'致命错误:在不在对象上下文中时使用$ 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'));
}
}
指示跟踪的错误注释。在由Property-&gt; get()方法的第一行引起的第一个$ prop-&gt; get()上运行PropertyTest-&gt; testGet()时发生错误。
除了发现的错字xdazz,以及Phil指出的弃用,user985935是对的。 :)
为了简化,我的类加载器使用静态get和phpUnit错误误导我的调查和我提供给你的信息来找到我的问题。遗憾。
答案 0 :(得分:7)
您的代码中存在拼写错误。
public function __contruct($file)
应该是
public function __construct($file)
答案 1 :(得分:-4)
'致命错误:不在对象上下文中使用$ this'
$ this关键字指向对象内部的方法只有你不能在对象外使用$ this我认为这是导致你的问题的原因