2016-05-23 5 views
0

Предполагая, что метод setEmail1() задает адрес электронной почты или генерирует сообщения об ошибках, если адрес электронной почты кажется неправильным, существует ли более элегантный способ, возможно, всего в 1 строке, чтобы сделать следующее? :Более элегантный PHP-код

$email2 = $newCustomer->setEmail1($_SESSION['customer_new']['email2']); 
    if ($email2 !== true) $_SESSION['customer_new']['error']['email2'] = $email2; 

Thank you!

+2

один вкладыш => Тройной оператор => http://php.net/manual/en/ language.operators.comparison.php –

+0

Возможный дубликат [разъяснение оператора PHP Ternary] (http://stackoverflow.com/questions/3580461/php-ternary-operator-clarification) – rsz

ответ

0

Вы могли бы сделать следующее. Но почему вы хотите написать все в одной строке?

$_SESSION['customer_new']['error']['email2'] = ($newCustomer->setEmail1($_SESSION['customer_new']['email2']) !== true) ? $email2 : null; 
+0

Это не работает для меня :-(, поскольку в моем случае переменная сеанса должна содержать сообщения об ошибках, сгенерированные методом класса, или не должна быть установлена ​​вообще (не установлена ​​в значение null). – mlattari

0
$_SESSION['customer_new']['error']['email2'] = $newCustomer->setEmail1($_SESSION['customer_new']['email2']) ?: null; 

Оператор?: Вариант тройного оператора :)

$x = $y ?: 0; 
// is equivalent to 
$x = $y ? $y : 0; 
+0

Это не работает для меня, так как в моем случае переменная сеанса должна содержать сообщения об ошибках, сгенерированные методом класса, или не должна быть установлена ​​вообще (не установлена ​​в значение null). – mlattari

+0

Если вы хотите, чтобы он не был установлен вообще, тогда нет другого пути, кроме того, что вы делали в исходном посте. Но если вы используете isset() на нулевом значении, вы получите тот же результат, что и он не определен. isset() также быстрее, чем array_key_exists() – Kulvar

0

Есть примеры, изложенные ниже, но для ясности и читаемости они обычно не рекомендуется. Это то, о чем вы просили, конечно, так это ответы, но я бы серьезно пересмотрел это. Если вам нужно отлаживать код, то эти лайнеры могут быть больны в нижних регионах.

Лично я бы посмотрел на что-то вроде этого, его основные классы не были вовлечены в шаблон, но вы можете захотеть взглянуть на образец класса, такой как MVC или заводской шаблон, чтобы сделать ваше кодирование более стандартизованным.

class.email.php

class email { 

    public function validateEmail($email_address) { 

     // add your validation here. format it in a readable 
     // manner and debugging/future updates will be a breeze. 

    return $result; 

    } 

} 

file.php

require_once('class.email.php'); 

// With a framework like MVC this would have been preloaded in 
// the controller, but we initialise it here. 
$class_obj = NEW email(); 

// and here is the one liner that you would see in your main file. 
$email = $class_obj->validateEmail($email); 
+0

Мой класс уже проверяет электронную почту, и если адрес неверен, метод setEmail1() возвращает сообщения об ошибках, которые хранятся в $ _SESSION ['customer_new'] ['error'] ['email2 '] ;-) – mlattari

+0

Затем вы уже отделяете логику от функциональности. Я не вижу необходимости в короткой руке, когда они просто делают код менее управляемым. – Chris

Смежные вопросы