第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何訪問在 PHP 中的函數(shù)和方法中動態(tài)創(chuàng)建的變量?

如何訪問在 PHP 中的函數(shù)和方法中動態(tài)創(chuàng)建的變量?

PHP
慕森王 2021-10-22 15:33:33
我無法訪問在 PHP 對象的函數(shù)或方法中動態(tài)創(chuàng)建的變量。這可能是作用域的問題,但我不知道為什么會發(fā)生這種情況,因為在 JavaScript 中,當您在函數(shù)內(nèi)部聲明 var 時,您仍然可以在該函數(shù)外部訪問它。我正在做的是這樣的:#code...$inputs = ['olympiad', 'test_type', 'year', 'level', 'country', 'test', 'answersheet'];$Form = new Form;$Form->addFields($inputs);foreach (array_keys($Form->fields) as $key) {  ${"$key"} = $Form->fields["$key"];}$olympiad->required(true)->type('select')->inValues($olyimpiadsArray)->label('Olmpíada')->errorMessage('some error message here');$test_type->required(true)->type('select')->inValues($testTypeArray)->errorMessage('bla bla');$level->required(true)->type('select')->inValues(['Nacional', 'Regional'])->label('Nível')->errorMessage('sample error message');$year->required(true)->type('int')->range(1998, 2019)->label('Ano')->errorMessage('another error message');$country->required(true)->type('string')->range(4, 64)->label('País')->errorMessage('these arent the real error messages');$test->type('file')->label('Prova')->allowedExtensions(['pdf'])->errorMessage('bla bla');$answersheet->type('file')->label('Gabarito')->allowedExtensions(['pdf'])->errorMessage('bla bla bla');這是有效的,因為字段是對象并且它們作為引用傳遞,所以我可以通過內(nèi)部創(chuàng)建的變量訪問這些對象,foreach并且表單也將能夠驗證字段對象。我foreach在許多網(wǎng)頁中都使用相同的代碼,所以很尷尬,因為我一次又一次地復(fù)制和粘貼代碼。預(yù)期成績我想要什么?我想做這個:Class Form {  #code  ...  public function create_vars_for_fields() {    foreach(array_keys($this->fields) as $key) {      ${"$key"} = $this->fields["$key"];    }    return $this;  }}然后,在我的 PHP 網(wǎng)頁上,我應(yīng)該能夠做到這一點:require_once 'Form.php';$inputs = ['olympiad', 'test_type', 'year', 'level', 'country', 'test', 'answersheet'];$Form = new Form;$Form->addFields($inputs)->create_vars_for_fields();#code...如何通過在函數(shù)或方法中動態(tài)創(chuàng)建這些變量來訪問它們?
查看完整描述

1 回答

?
狐的傳說

TA貢獻1804條經(jīng)驗 獲得超3個贊

我終于找到了一個聰明,清晰的方法來完成這個!該解決方案使用extract內(nèi)置函數(shù)。


雖然我不再需要它,因為我使用 Laravel 進行驗證,但我仍然想分享答案,以便它可以幫助其他人。


解決方案


Class Form {

  #code

  ...

  public function getFieldsCompacted() {

    $compactedFields = [];

    foreach(array_keys($this->fields) as $key) {

      $compactedFiels["$key"] = $this->fields["$key"];

    }

    return $compactedFields;

  }

}

然后,在代碼上:


require_once '/path/to/Form.php';


$inputs = ['olympiad', 'test_type', 'year', 'level', 'test', 'answer_sheet'];

$Form = new Form;

$Form->addFields($inputs);

extract($Form->getFieldsCompacted());

這樣我可以做到:


$olympiad->required(true)->type('select')->inValues($olyimpiadsArray)->label('Olimpíada')->errorMessage('some error message here');

$test_type->required(true)->type('select')->inValues($testTypeArray)->errorMessage('bla bla');

$level->required(true)->type('select')->inValues(['Nacional', 'Regional'])->label('Nível')->errorMessage('sample error message');

$year->required(true)->type('int')->range(1998, 2019)->label('Ano')->errorMessage('another error message');

$test->type('file')->label('Prova')->allowedExtensions(['pdf'])->errorMessage('bla bla');

$answersheet->type('file')->label('Gabarito')->allowedExtensions(['pdf'])->errorMessage('bla bla bla');

而不是做:


$Form->fields['olympiad']->required(true)->type('select')->inValues($olyimpiadsArray)->label('Olimpíada')->errorMessage('some error message here');

$Form->fields['test_type']->required(true)->type('select')->inValues($testTypeArray)->errorMessage('bla bla');

$Form->fields['level']->required(true)->type('select')->inValues(['National', 'State'])->label('Nível')->errorMessage('sample error message');

$Form->fields['year']->required(true)->type('int')->range(1998, 2019)->label('Ano')->errorMessage('another error message');

$Form->fields['test']->type('file')->label('Prova')->allowedExtensions(['pdf'])->errorMessage('bla bla');

$Form->fields['answersheet']->type('file')->label('Gabarito')->allowedExtensions(['pdf'])->errorMessage('bla bla bla');

編輯:


RiggsFolly 指出使用extract. 我完全同意使用extractin$_POST和$_GET. 但是,這里的情況并非如此,因為要提取的變量的定義如您在

$inputs = ['olympiad', 'test_type', 'year', 'level', 'test', 'answer_sheet'];. 因此,extract只會提取這些變量,而不會覆蓋其他變量。因此,上面的代碼沒有風(fēng)險。


查看完整回答
反對 回復(fù) 2021-10-22
  • 1 回答
  • 0 關(guān)注
  • 164 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號