WordPress — Можете ли вы использовать функцию в качестве аргумента по умолчанию для другой функции в PHP?

Могу ли я использовать функцию в качестве значения по умолчанию для аргумента в другой функции? В приведенном ниже примере я пытаюсь использовать функцию WordPress get_the_title() в качестве значения по умолчанию:

function GetPageDepartment($department = get_the_title()) {
return $department;
}

Как есть, скобки вызывают ошибку разбора. Есть ли способ обойти это, или я должен был бы передать значение функции в переменную где-то за пределами значений по умолчанию?

Я знаю, что реальный код здесь будет в значительной степени бессмысленным, поскольку он просто возвращает get_the_title(), но это просто в качестве примера, поскольку то, что я на самом деле делаю с аргументом, не имеет отношения к вопросу.

0

Решение

Ответ «нет и да, но … пока …».
Нет, используя PHP 5.6, вы не можете назначить функцию в качестве значения по умолчанию для функции / метода.
Да, вы можете назначить строку, и если вы используете этот параметр / переменную в контексте функции, т.е. echo $department();строка будет рассматриваться как имя функции и get_the_title() будет вызван. Но … довольно уродливо, что вам приходится полагаться на отношение строка-> имя функции. Еще … кого это волнует?


редактировать: на ваше рассмотрение ….

<?php
function get_the_title() { return "the title"; }

function GetPageDepartment( callable $department=null ) {
if ( null==$department ) {
$department = 'get_the_title';
}
return '<'.$department().'>';
}echo GetPageDepartment();
1

Другие решения

Нет ты не можешь
используйте этот код

<?php

function get_the_title(){
return 'this is the title';
}
$temp = get_the_title();
function GetPageDepartment($department) {
echo $department;
}

GetPageDepartment($temp);
0

В конце концов я набрался:

function GetPageDepartment($department = null) {
$department = $department ?: get_the_title(); //Sets value if null.
}

который устанавливает значение $ Department равным get_the_title (), если не установлено другое значение.

0
По вопросам рекламы [email protected]