Я вызываю класс по строковой переменной, переданной аргументом функции.Вызов класса по строке PHP
ApiTester.php
use MyApp\Sites\Site;
abstract class ApiTester extends TestCase() {
/**
* Make a new record in the DB
*
* @param $type
* @param array $fields
* @throws BadMethodCallException
*/
protected function make($type, array $fields = [])
{
while($this->times--)
{
$stub = array_merge($this->getStub(), $fields);
$type::create($stub);
}
}
SitesTester.php
class SitesTester extends ApiTester() {
/** @test */
public function it_fetches_a_single_site()
{
// arrange
$this->make('Site');
// act
$site = $this->getJson('api/v1/sites/1')->data;
// assertion
$this->assertResponseOk();
$this->assertObjectHasAttributes($site, 'name', 'address');
}
Site.php // Eloquent Модель
namespace MyApp\Sites;
class Site extends \Eloquent {
}
Но если я вызываю класс, который содержит, например, строковая переменная $type
; string variable $type
содержит «Сайт», он говорит, что класс «Сайт» не найден.
Я попытался вручную набрать Site::create($stub)
и, наконец, принимает его.
Я также попытался call_user_func($type::create(), $stub);
и $model = new $type; $model->create($stub);
, но, к сожалению, это говорит класс «Сайт» не найден.
Любые идеи?
Возможно, потому, что у вас есть только класс 'SiteTester', или вы не показываете какой-либо свой код? – Justinas
Что ты имеешь в виду? @Justinas? –
'class SitesTester расширяет ApiTester()' – Justinas