php中的变量作用域

php中的变量作用域,php,oop,phpunit,Php,Oop,Phpunit,为什么我可以在函数内部定义类AdRequest的新实例,如下所示: require_once 'adRequest.php'; class adRequestTest extends PHPUnit_Framework_TestCase{ public $fixture; function testGetHash_returnsCorrectValue(){ $fixture = new AdRequest(); $fixture->site = "dummy.

为什么我可以在函数内部定义类
AdRequest
的新实例,如下所示:

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";
  }
}
但当我试图创建这样的实例时:

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分析错误:语法错误,意外的“$fixture”(T_变量), 期望函数(T_函数)


在类声明和方法之间放置的任何内容都必须是该特定类的属性,而不是代码

在您的情况下,您应该:

require_once 'adRequest.php';

class adRequestTest extends PHPUnit_Framework_TestCase{

  public $fixture = new AdRequest();

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

类定义只能包含成员声明——方法、实例变量、常量等等。它们不能像函数体那样包含任意代码。

如果要创建一次实例并在每个函数中使用它,请使用
setUp()
,在每个testXxx()方法之前调用setUp()


这是某个特定测试框架的特性吗?正常的PHP初始化方法是
\uu construct()