不在对象上下文中时使用$ this

时间:2011-11-09 05:26:00

标签: 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'));
    }
}

修改

指示跟踪的错误注释。在由Property-&gt; get()方法的第一行引起的第一个$ prop-&gt; get()上运行PropertyTest-&gt; testGet()时发生错误。

解决方案

除了发现的错字xdazz,以及Phil指出的弃用,user985935是对的。 :)

为了简化,我的类加载器使用静态get和phpUnit错误误导我的调查和我提供给你的信息来找到我的问题。遗憾。

2 个答案:

答案 0 :(得分:7)

您的代码中存在拼写错误。

public function __contruct($file)

应该是

public function __construct($file)

答案 1 :(得分:-4)

'致命错误:不在对象上下文中使用$ this'

$ this关键字指向对象内部的方法只有你不能在对象外使用$ this我认为这是导致你的问题的原因