Синтаксис языка программирования PHP: объясните назначение оператора

12
iguania
На сайте с 10.12.2010
Offline
72
1108

Добрый вечер, уважаемые.

Есть вопрос по синтаксису языка программирования PHP. Ниже код метода:

public function install()

{
if (!parent::install() || !$this->registerHook('displayHome') || !$this->registerHook('displayHeader'))
return false;

$res = Db::getInstance()->execute('
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'editorial` (
`id_editorial` int(10) unsigned NOT NULL auto_increment,
`id_shop` int(10) unsigned NOT NULL ,
`body_home_logo_link` varchar(255) NOT NULL,
PRIMARY KEY (`id_editorial`))
ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8');

if ($res)
$res &= Db::getInstance()->execute('
CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'editorial_lang` (
`id_editorial` int(10) unsigned NOT NULL,
`id_lang` int(10) unsigned NOT NULL,
`body_title` varchar(255) NOT NULL,
`body_subheading` varchar(255) NOT NULL,
`body_paragraph` text NOT NULL,
`body_logo_subheading` varchar(255) NOT NULL,
PRIMARY KEY (`id_editorial`, `id_lang`))
ENGINE='._MYSQL_ENGINE_.' DEFAULT CHARSET=utf8');


if ($res)
foreach
(Shop::getShops(false) as $shop)
$res &= $this->createExampleEditorial($shop['id_shop']);

if (!$res)
$res &= $this->uninstall();

return $res;
}

Вопрос: что делает оператор "&=". Не встречал этого оператора ранее, но знаком со следующими "+=, -=, *=, /=, .=". Объясните, пожалуйста.

Все всегда заканчивается хорошо. Если все закончилось плохо, значит, это еще не конец…
Ваано
На сайте с 01.08.2009
Offline
112
#1

По идее &= - это побитовое И:

$a &= $b $a = $a & $b

Туры в Мексику тут (http://www.metmexico.com). Оптимальное отношение цена/качество.
КВ
На сайте с 02.07.2012
Offline
47
#2

Попробуй поменять местами - &= на =&

numer482
На сайте с 06.07.2011
Offline
44
#3

Что то вроде ссылки:

$a = 42;

$b =& $a;

//later
echo $a; // 42
echo $b; // 42

$a = 13;
echo $a; // 13
echo $b; // 13
iguania
На сайте с 10.12.2010
Offline
72
#4

numer482, заметьте, что "&=", но не "=&" !

Хотелось бы, чтобы кто-нить объяснил, что конкретно происходит в методе, который описал выше (в контексте обсуждаемого оператора "&=").

КВ
На сайте с 02.07.2012
Offline
47
#5
iguania:
numer482, заметьте, что "&=", но не "=&" !

Хотелось бы, чтобы кто-нить объяснил, что конкретно происходит в методе, который описал выше (в контексте обсуждаемого оператора "&=").

Происходит тоже самое что и "=", можешь стереть "&" и убедиться, я лично так сделал 😂. Попробуй поменять "&=" на "=&" и посмотри работу скрипта.

iguania
На сайте с 10.12.2010
Offline
72
#6

Кот в сапогах, верю, что происходит одно и то же действие, но, все же, хотелось бы понять: почему автор использует такой синтаксис (кстати, код метода взят из исходников CMS Prestashop, где очень часто используется подобный оператор). Если у кого-то есть ссылочка на документацию или что-нить подобное, то буду раз.

P.S. Еще хотелось бы от знающих подробностей на счет вот этого выражения

foreach (Shop::getShops(false) as $shop) { ... }

не могу понять, почему оператор привидения типов стоит после, а не до.

siv1987
На сайте с 02.04.2009
Offline
427
#7
iguania:
не могу понять, почему оператор привидения типов стоит после, а не до.

Какой оператор типов, это вызов статического метода с передачей аргумента.

iguania:
верю, что происходит одно и то же действие, но, все же, хотелось бы понять

Это битовые операции http://www.php.net/manual/ru/language.operators.bitwise.php

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

doctorpc
На сайте с 12.07.2009
Offline
112
#8

просто короткая запись a = a&b. такая же как a+=b; или a.=b и т.д.

A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T)((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.

http://stackoverflow.com/questions/3907082/does-the-java-operator-apply-or

IL
На сайте с 20.04.2007
Offline
435
#9
iguania:
Хотелось бы, чтобы кто-нить объяснил, что конкретно происходит в методе, который описал выше (в контексте обсуждаемого оператора "&=").

так написали же уже - побитовое "и" с "самим собой"

upd.. сколько понаписали-то.. вот и отходи потом "на минутку"..

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
siv1987
На сайте с 02.04.2009
Offline
427
#10

ivan-lev, вопрос зачем? :) Что за извращения.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий