2015-07-14 7 views
-1

Почему я могу определить новый экземпляр класса AdRequest внутри функции, как это:переменные области видимости в PHP

require_once 'adRequest.php'; 
class adRequestTest extends PHPUnit_Framework_TestCase{ 

    public $fixture; 

    function testGetHash_returnsCorrectValue(){ 
    $fixture = new AdRequest(); 
    $fixture->site = "dummy.com"; 
    } 
} 

, но когда я пытаюсь создать этот экземпляр так:

require_once 'adRequest.php'; 

class adRequestTest extends PHPUnit_Framework_TestCase{ 

    public $fixture; 
    $fixture = new AdRequest(); 

    function testGetHash_returnsCorrectValue(){ 
    $fixture->site = "dummy.com"; 
    } 
} 

я получил эта ошибка:

PHP Parse error: syntax error, unexpected '$fixture' (T_VARIABLE), expecting function (T_FUNCTION)

ответ

1

Если вы хотите создать экземпляр один раз и использовать его в каждой функции, используйте setUp(), нАлАдкА() вызывается перед каждым методом

<?php 

require_once 'adRequest.php'; 
class adRequestTest extends PHPUnit_Framework_TestCase{ 

public $fixture; 

public function setUp() { 

    $this->fixture = new AdRequest(); 
} 

function testGetHash_returnsCorrectValue(){ 

    $this->fixture->site = "dummy.com"; 
} 
+0

Является ли это признаком какой-то конкретной тестовой структуры testXxx()? Обычный метод инициализации PHP - '__construct()'. – Barmar

+0

PHPUnit test framework https://phpunit.de/manual/current/en/fixtures.html –

0

Все, что вы ставите между объявлением класса и методами, должно быть в дань этого конкретного класса, а не код.

В вашем случае, вы должны поставить:

require_once 'adRequest.php'; 

class adRequestTest extends PHPUnit_Framework_TestCase{ 

    public $fixture = new AdRequest(); 

    function testGetHash_returnsCorrectValue(){ 
    $fixture->site = "dummy.com"; 
    } 
} 
0

Определение класса может содержать только объявления членов - методы, переменные экземпляра, константы, и так далее. Они не могут содержать произвольный код так же, как может функционировать тело функции.