从匿名类访问外部变量

我正在尝试另一种方法来做到这一点:


public function index()

{

    $faker = Faker\Factory::create('fr_FR');


    $ideas = [];


    for ($i = 1; $i <= rand(10, 50); $i++) {

        $idea = new \stdClass;

        $idea->id = $i;

        $idea->author = $faker->name;

        //...


        $ideas[] = $idea;

    }

}

我不想在循环中创建对象并分配属性,而是想从类创建对象,并$ideas[]使用 array_pad() 函数填充:


public function index()

{

    $faker = Faker\Factory::create('fr_FR');


    $ideas = [];


    $idea = new class {

        private $id;

        private $author;


        function __construct() {

            $this->id = count($ideas) + 1;

            $this->author = $faker->name;

        }

    };


    array_pad($ideas, rand(10, 50), new $idea);

        

}

所以我需要从匿名类中访问$fakerand 。$ideas我尝试将它们传递给班级,如下所示:


$idea = new class($ideas, $faker) {


    private $id;

    private $author;


    private $ideas

    private $faker


    function __construct($ideas, $faker) {

        $this->id = count($ideas) + 1;

        $this->author = $faker->name;

    }

};

但我得到一个


函数 class@anonymous::__construct() 的参数太少,已传递 0 个参数


慕勒3428872
浏览 101回答 1
1回答

烙印99

悲伤的消息:你不能用于array_pad此目的。您需要应用以下修复程序来消除该错误:// array_pad($ideas, rand(10, 50), new $idea);array_pad($ideas, rand(10, 50), $idea); // remove new既然你已经在这里做了新的:$idea = new class($ideas, $faker) {尽管这会填满$ideas。$idea它会一遍又一遍地存储对您的相同引用。这意味着如果您更改一个元素,则所有元素都会发生此更改(我想这是不希望的)。为了使其正常工作,您必须使用一个循环,它$idea为每个条目创建一个新的:$faker = Faker\Factory::create('fr_FR');$ideas = [];for ($i = rand(10, 50); $i > 0; $i--) {&nbsp; &nbsp; $ideas[] = new class($ideas, $faker) {&nbsp; &nbsp; &nbsp; &nbsp; private $id;&nbsp; &nbsp; &nbsp; &nbsp; private $author;&nbsp; &nbsp; &nbsp; &nbsp; function __construct($ideas, $faker) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this->id = count($ideas) + 1;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $this->author = $faker->name;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; };}工作示例。附加信息而不是这样做for ($i = 1; $i <= rand(10, 50); $i++)最好这样做for ($i = rand(10, 50); $i > 0; $i--)原因是每个循环都会调用比较,因此您会在每个循环上生成一个新的随机数。例子这是有问题的,因为你往往会得到更多这样的低数字。例如,要获得 50 个循环,随机数必须> $i每次都返回 - 这是非常不可能的。另一件事:array_pad返回填充的数组,所以你必须写$ideas = array_pad(...
打开App,查看更多内容
随时随地看视频慕课网APP