php 中的变量范围

variables scope in php

为什么我可以像这样在函数内部定义 class 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";
  }
}

我收到这个错误:

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

无论您在 class 的声明和方法之间放置什么,都必须是特定 class 的属性,而不是代码。

在你的情况下,你应该输入:

require_once 'adRequest.php';

class adRequestTest extends PHPUnit_Framework_TestCase{

  public $fixture = new AdRequest();

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

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

如果您想创建一次实例并在每个函数中使用它,请使用 setUp(),在每个 testXxx() 方法之前调用 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";
 }