Я новичок в PHP, и у меня есть простой вопрос.
ОБНОВИТЬ: я использую PHP 5.6 (лучшим решением было бы обновить версию PHP, но предположим, что я могу использовать только PHP 5.6)
У меня есть такой код:
function findOrCreateMasterRecord ($masterTableName, $masterName) {
if (isset($sampleArr[$masterTableName][$masterName])) {
return $sampleArr[$masterTableName][$masterName];
}
return getNewMasterIndex($masterTableName, $masterName);
}
Этот код работает правильно. Но я хочу сделать блок «если» более простым, потому что он дважды приближается к одному и тому же индексу ($ sampleArr [$ masterTableName] [$ masterName]), и я думаю, что это ... отчасти .. нехорошо.
Есть ли способ сделать эту функцию более эффективной?
Спасибо.
Я бы оставил все как есть и сосредоточился на вещах, которые имеют большее влияние, если честно. Конечно, в php7 вы могли бы сделать его несколько более читаемым с помощью ??, но на самом деле это не сильно отличается. Вам действительно нужно (см. Ответ ниже), возможно, сократить ваши переменные до чего-то нечитаемого, чтобы сохранить их в одной строке. Это больше, чем ваш текущий чек в моей книге
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что этот вопрос работает, и поэтому его следует опубликовать при проверке кода.
Я полностью проголосую за то, что упомянула @Nanne. Что касается изучения языка, это интересный вопрос. Я бы не подумал, что есть какие-то реальные преимущества в сокращении кода ради его сокращения (уменьшение сложности метода - это хорошо, но оно не всегда коррелирует с номерами строк)
В этом коде есть ошибка, делающая условие бессмысленным. Переменная $ sampleArr никогда не устанавливается.






В PHP 7+ вы можете использовать нулевой оператор объединения:??
function findOrCreateMasterRecord ($masterTableName, $masterName)
{
return $sampleArr[$masterTableName][$masterName] ?? getNewMasterIndex($masterTableName, $masterName);
}
Если не в PHP 7, тернарный оператор может сократить ваш код, но все равно будет избыточным:
function findOrCreateMasterRecord ($masterTableName, $masterName)
{
return isset($sampleArr[$masterTableName][$masterName]) ? $sampleArr[$masterTableName][$masterName] : getNewMasterIndex($masterTableName, $masterName);
}
С более короткими именами переменных для лучшего чтения:
// PHP 7
function findOrCreateMasterRecord ($table, $name)
{
return $arr[$table][$name] ?? getNewMasterIndex($table, $name);
}
// Under PHP 7
function findOrCreateMasterRecord ($table, $name)
{
return isset($arr[$table][$name]) ? $arr[$table][$name] : getNewMasterIndex($table, $name);
}
Вы можете сократить до следующего, поскольку ваше условие никогда не будет выполнено:
<?php
function findOrCreateMasterRecord ($masterTableName, $masterName) {
return getNewMasterIndex($masterTableName, $masterName);
}
Если вы используете PHP 7+, вы можете использовать нулевой оператор объединения (
??)