как выполнить функцию с тем же именем, что и переменная в laravel - PullRequest
0 голосов
/ 24 марта 2019

У меня есть массив, который содержит имена атрибутов модели laravel (App\User), например:

$documents = array(
      'passport_expire' => 22,
      'residency' => 13
      );

Если я вызвал эти функции напрямую, он вернет логическое значение, например:

App\User::find(2)->passport_expire;//will output true / false

Я хочу выполнить функции внутри foreach:

foreach($documents as $type => $val){
// I want to call the attributes
App\User::find(1)->{$type};
//I want to call and execute App\User::find(1)->passport_expire and App\User::find(1)->residency

Я прочитал в документации php о способе с похожим подходом под названием Переменные функции , но я не знаю, какчтобы сделать это в Laravel.

Ответы [ 2 ]

2 голосов
/ 25 марта 2019

Вы называете атрибуты / свойства как функции?

Пока я думаю, что вы имели в виду переменные .

Если вы хотите получить доступ к таким свойствам, как passport_expire или residency, вы можете попробовать как

$user = App\User::find(1);
foreach  (array_keys($documents) as $document) {
    $documents[$document] = $user->{$document};
}

Приведенный выше код обновит массив $documents значениями $user свойств объекта.

Но, если вы хотите выполнить как функции , как вы упомянули, вам нужно попробовать call_user_func или call_user_func_array

2 голосов
/ 24 марта 2019

Как насчет

App\User::find(1)->$type;

Также вы хотите использовать строку и переменную

App\User::find(1)->$type . '_test';

Однако, если вы хотите использовать строку как первую, я думаю, вам нужно создать переменнуюзаранее и используйте первый подход.

$type = "xx_$type_xx"
App\User::find(1)->$type;

Принимая во внимание, что App\User::find(1)->{$type}; работает,

Но App\User::find(1)->{$type . 'text'}; не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...