Как можно сделать этот код короче?

Я новичок в 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]), и я думаю, что это ... отчасти .. нехорошо.

Есть ли способ сделать эту функцию более эффективной?

Спасибо.

Если вы используете PHP 7+, вы можете использовать нулевой оператор объединения (??)

iainn 06.08.2018 12:07

Я бы оставил все как есть и сосредоточился на вещах, которые имеют большее влияние, если честно. Конечно, в php7 вы могли бы сделать его несколько более читаемым с помощью ??, но на самом деле это не сильно отличается. Вам действительно нужно (см. Ответ ниже), возможно, сократить ваши переменные до чего-то нечитаемого, чтобы сохранить их в одной строке. Это больше, чем ваш текущий чек в моей книге

Nanne 06.08.2018 12:29

Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что этот вопрос работает, и поэтому его следует опубликовать при проверке кода.

Andreas 06.08.2018 22:41

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

Mehrdad Dastgir 24.08.2020 18:53

В этом коде есть ошибка, делающая условие бессмысленным. Переменная $ sampleArr никогда не устанавливается.

PeterM 24.08.2020 18:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В 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);
}

Другие вопросы по теме