为了账号安全,请及时绑定邮箱和手机立即绑定

从匿名类访问外部变量

从匿名类访问外部变量

PHP
慕勒3428872 2023-08-11 16:51:01
我正在尝试另一种方法来做到这一点: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 个参数
查看完整描述

1 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

悲伤的消息:你不能用于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--) {

    $ideas[] = new class($ideas, $faker) {

        private $id;

        private $author;


        function __construct($ideas, $faker) {

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

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

        }

    };

}

工作示例。


附加信息

而不是这样做


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


最好这样做


for ($i = rand(10, 50); $i > 0; $i--)


原因是每个循环都会调用比较,因此您会在每个循环上生成一个新的随机数。例子


这是有问题的,因为你往往会得到更多这样的低数字。例如,要获得 50 个循环,随机数必须> $i每次都返回 - 这是非常不可能的。


另一件事:array_pad返回填充的数组,所以你必须写


$ideas = array_pad(...


查看完整回答
反对 回复 2023-08-11
  • 1 回答
  • 0 关注
  • 93 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信