Что означает в php
Перейти к содержимому

Что означает в php

  • автор:

Что значит знак «->» в PHP?

Добрый день, Подскажите пожалуйста начинающему, что значит знак «->» в PHP? Гуголю знак не поддается ( Например как интерпритировать выражение: if ( $use_desc_for_title == 0 || empty($category->description) ) Спасибо

На сайте с 15.12.2005
25 декабря 2013, 22:59

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft

На сайте с 07.12.2013
25 декабря 2013, 23:18
edogs:
http://www.php.net/manual/ru/language.oop5.properties.php

Большущее спасибо за оперативный ответ. Хоть понятно в какую сторону думать. и все же для наглядности «переведите» ))) пожалуйста с php на обывательский/человеческий условие if ( empty($category->description) ) ? ПС: Тапками не закидывайте пожалуйста — пытаюсь испортить первый шаблон Вордпресс 🙂 — по пути операторы php «с нуля » пытаюсь разобрать. Образование — Бейсик облегченный 🙂

На сайте с 04.07.2010
25 декабря 2013, 23:28

Переменная $category имеет свой массив, в ней есть аргумент description, то есть конструкция $category->description сразу обращается к этому аргументу. Можно еще $category[0][3] тоже самое что и $category->description

На сайте с 07.12.2013
25 декабря 2013, 23:39

AGRESSOR:
Переменная $category имеет свой массив, в ней есть аргумент description, то есть конструкция $category->description сразу обращается к этому аргументу.
Можно еще $category[0][3] тоже самое что и $category->description

Что за оператор: ‘??’

@u_mulder правила Stack Overflow недвусмысленно указывают, что если Google находит подобный ответ на SO, то необходимо закрыть ответ, как дубликат. А если не находит — то ответ необходимо добавить. Каким бы «банальным» или «ленивым» вопрос не был.

7 янв 2019 в 10:33

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Это короткая форма (синтаксический сахар) тернарного оператора с isset()

$referer = isset($next['referer']) ? $next['referer'] : '' 

который, в свою очередь, является короткой формой условного оператора

if (isset($next['referer'])) < $referer = $next['referer']; >else

Называется null coalescing operator, или в переводе, оператор объединения с null. Название это не очень точное, правильнее было бы назвать «оператор выбора из двух вариантов, существующей переменной или дефолтного значения», но это было бы слишком длинно. В любом случае, это мудреное название означает, что РНР выбирает из двух вариантов, «объединяет» их: если переменная есть, то используется её значение, если переменной нет или она равна null — то используется значение, указанное после ?? .

Отдельно следует отметить, что в приведенном написании ( if ($next[‘referer’] ?? null) ) этот оператор не имеет смысла, поскольку нам не нужно возвращать никакое значение, а нужно лишь узнать, установлена ли переменная $next[‘referer’]. В этом случае правильнее будет явно вызвать функцию isset():

if (isset($next['referer'])) 

это повысит осмысленность и читабельность кода. Поскольку код должен делать только то, что нужно, и в нем не должно быть бессмысленных участков.

Правильное применение данного оператора — это использование возвращаемого значения, например

$username = $_GET['user'] ?? 'nobody'; // или echo $_GET['user'] ?? ''; 

Вся эта история придумана для того, чтобы избежать ошибки «Notice: Undefined variable/index/offset» с наименьшим количеством кода. Но следует при этом помнить, что большинство пользователей РНР не понимают смысла этой ошибки, и считают её досадной помехой, от которой надо избавляться любыми средствами. Разумеется, это не так. Как и любое сообщение об ошибке, это предупреждение сигнализирует программисту о возможных проблемах в коде. И поэтому бездумное подавление этой ошибки путем применения оператора ?? оказывается столь же вредным, как и использование оператора @ .

Функции isset(), empty() и оператор объединения с null следует применять только в том случае, если заведомо ожидается, что переменной может не быть. Если же переменная должна быть, то этот оператор применять не следует, а вместо этого надо дать РНР сообщить об ошибке. Классический пример неправильного использования — это обработка текстовых полей HTML формы. Все поля HTML формы, за исключением чекбоксов и радиокнопок всегда в обязательном порядке передаются на сервер. То есть, проверять их на существование не нужно. Если возникнет ошибка «Undefined index» — то либо у нас опечатка в имени поля/индексе массива в РНР, либо форма была подделана (с ошибками). В обоих случаях дальнейшая обработка формы будет бессмысленной, а выдача ошибки — единственно правильным сценарием.

Что означает в php

Переменные в PHP представлены знаком доллара с последующим именем переменной. Имя переменной чувствительно к регистру.

Имена переменных соответствуют тем же правилам, что и остальные наименования в PHP. Правильное имя переменной должно начинаться с буквы или символа подчёркивания и состоять из букв, цифр и символов подчёркивания в любом количестве. Это можно отобразить регулярным выражением: ^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$

Замечание: Под буквами здесь подразумеваются символы a-z, A-Z и байты от 128 до 255 ( 0x80-0xff ).

Замечание: $this — это специальная переменная, которой нельзя ничего присваивать. До PHP 7.1.0 было возможно косвенное присвоение (например, с использованием переменных переменных).

Подсказка

Для информации о функциях работы с переменными обращайтесь к разделу функций работы с переменными.

$var = ‘Боб’ ;
$Var = ‘Джо’ ;
echo » $var , $Var » ; // выведет «Боб, Джо»

$ 4site = ‘ещё нет’ ; // неверно; начинается с цифры
$_4site = ‘ещё нет’ ; // верно; начинается с символа подчёркивания
$täyte = ‘mansikka’ ; // верно; ‘ä’ это (Расширенный) ASCII 228.
?>

По умолчанию переменные всегда присваиваются по значению. То есть, когда вы присваиваете выражение переменной, все значение оригинального выражения копируется в эту переменную. Это означает, к примеру, что после того как одной переменной присвоено значение другой, изменение одной из них не влияет на другую. Дополнительную информацию об этом способе присвоения смотрите в разделе Выражения.

PHP также предлагает иной способ присвоения значений переменным: присвоение по ссылке. Это означает, что новая переменная просто ссылается (иначе говоря, «становится псевдонимом» или «указывает») на оригинальную переменную. Изменения в новой переменной отражаются на оригинале, и наоборот.

Для присвоения по ссылке, просто добавьте амперсанд (&) к началу имени присваиваемой (исходной) переменной. Например, следующий фрагмент кода дважды выводит ‘ Меня зовут Боб ‘:

$foo = ‘Боб’ ; // Присваивает $foo значение ‘Боб’
$bar = & $foo ; // Ссылка на $foo через $bar.
$bar = «Меня зовут $bar » ; // Изменение $bar.
echo $bar ;
echo $foo ; // меняет и $foo.
?>

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

$foo = 25 ;
$bar = & $foo ; // Это верное присвоение.
$bar = &( 24 * 7 ); // Неверно; ссылка на неименованное выражение.

function test ()
return 25 ;
>

Хорошей практикой считается инициализировать переменные, хотя в PHP это и не обязательное требование. Неинициализированные переменные принимают значение по умолчанию в зависимости от их типа, который определяется из контекста их первого использования: логические переменные принимают значение false , целые числа и числа с плавающей точкой — ноль, строки (например, при вызове с конструкцией echo ) — пустую строку, а массивы становятся пустыми массивами.

Пример #1 Значения по умолчанию в неинициализированных переменных

// Неустановленная И не имеющая ссылок (то есть без контекста использования) переменная; выведет NULL
var_dump ( $unset_var );

// Использование логической переменной; выведет ‘false’ (Подробнее по этому синтаксису смотрите раздел о тернарном операторе)
echo $unset_bool ? «true\n» : «false\n» ;

// Строковое использование; выведет ‘string(3) «abc»‘
$unset_str .= ‘abc’ ;
var_dump ( $unset_str );

// Целочисленное использование; выведет ‘int(25)’
$unset_int += 25 ; // 0 + 25 => 25
var_dump ( $unset_int );

// Использование в качестве числа с плавающей точкой (float); выведет ‘float(1.25)’
$unset_float += 1.25 ;
var_dump ( $unset_float );

// Использование в качестве массива; выведет array(1) < [3]=>string(3) «def» >
$unset_arr [ 3 ] = «def» ; // array() + array(3 => «def») => array(3 => «def»)
var_dump ( $unset_arr );

// Использование в качестве объекта; создаёт новый объект stdClass (смотрите http://www.php.net/manual/ru/reserved.classes.php)
// Выведет: object(stdClass)#1 (1) < ["foo"]=>string(3) «bar» >
$unset_obj -> foo = ‘bar’ ;
var_dump ( $unset_obj );
?>

Полагаться на значения по умолчанию неинициализированных переменных довольно проблематично при включении файла в другой файл, использующий переменную с таким же именем. В случае работы с неинициализированной переменной вызывается ошибка уровня E_WARNING (до PHP 8.0.0 выбрасывалась ошибка уровня E_NOTICE ), за исключением случая добавления элементов в неинициализированный массив. Для обнаружения инициализации переменной может быть использована языковая конструкция isset() .

User Contributed Notes 2 notes

13 years ago

This page should include a note on variable lifecycle:

Before a variable is used, it has no existence. It is unset. It is possible to check if a variable doesn’t exist by using isset(). This returns true provided the variable exists and isn’t set to null. With the exception of null, the value a variable holds plays no part in determining whether a variable is set.

Setting an existing variable to null is a way of unsetting a variable. Another way is variables may be destroyed by using the unset() construct.

print isset( $a ); // $a is not set. Prints false. (Or more accurately prints ».)
$b = 0 ; // isset($b) returns true (or more accurately ‘1’)
$c = array(); // isset($c) returns true
$b = null ; // Now isset($b) returns false;
unset( $c ); // Now isset($c) returns false;
?>

is_null() is an equivalent test to checking that isset() is false.

The first time that a variable is used in a scope, it’s automatically created. After this isset is true. At the point at which it is created it also receives a type according to the context.

$a_bool = true ; // a boolean
$a_str = ‘foo’ ; // a string
?>

If it is used without having been given a value then it is uninitalized and it receives the default value for the type. The default values are the _empty_ values. E.g Booleans default to FALSE, integers and floats default to zero, strings to the empty string », arrays to the empty array.

A variable can be tested for emptiness using empty();

$a = 0 ; //This isset, but is empty
?>

Unset variables are also empty.

empty( $vessel ); // returns true. Also $vessel is unset.
?>

Everything above applies to array elements too.

$item = array();
//Now isset($item) returns true. But isset($item[‘unicorn’]) is false.
//empty($item) is true, and so is empty($item[‘unicorn’]

$item [ ‘unicorn’ ] = » ;
//Now isset($item[‘unicorn’]) is true. And empty($item) is false.
//But empty($item[‘unicorn’]) is still true;

$item [ ‘unicorn’ ] = ‘Pink unicorn’ ;
//isset($item[‘unicorn’]) is still true. And empty($item) is still false.
//But now empty($item[‘unicorn’]) is false;
?>

For arrays, this is important because accessing a non-existent array item can trigger errors; you may want to test arrays and array items for existence with isset before using them.

Что означает в php

Базовый оператор присваивания обозначается символом «=». Кажется, что это оператор «равно». Это не так. Оператор присваивания означает, что левый операнд получает значение правого выражения (то есть левому операнду «будет присвоено значение»).

Результатом выполнения оператора присваивания будет само присвоенное значение. То есть, результат выполнения выражения « $a = 3 » будет равен 3. Это разрешает делать трюки наподобие:

$a = ( $b = 4 ) + 5 ; // Значение переменной $a равно 9, а переменной $b присвоено значение 4.

В дополнение к базовому оператору присваивания существуют «комбинированные операторы» для всех бинарных арифметических операций, операций объединения массивов и строковых операций, которые дают присвоить значение в выражении, а затем установить его значение в результат этого выражения. Например:

$a = 3 ;
$a += 5 ; // устанавливает для переменной $a значение 8, как если бы было написано: $a = $a + 5;
$b = «Привет» ;
$b .= «-привет!» ; // устанавливает переменной $b значение «Привет-привет!», как и $b = $b . «-привет!»;

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

Исключение из обычного для PHP способа присваивания по значению — объекты ( object ), которые присваиваются по ссылке. Принудительно скопировать объекты по значению можно через ключевое слово clone.

Присваивание по ссылке

Присваивание по ссылке тоже поддерживается, для этого можно использовать синтаксис $var = &$othervar; . Присваивание по ссылке означает, что обе переменные указывают на одни и те же данные и ничего никуда не копируется.

Пример #1 Assigning by reference

$a = 3 ;
$b = & $a ; // $b — это ссылка на переменную $a

print » $a \n» ; // печатает 3
print » $b \n» ; // печатает 3

$a = 4 ; // меняем переменную $a

print » $a \n» ; // печатает 4
print » $b \n» ; // также печатает 4, так как переменная $b — это ссылка на переменную $a,
// а значение переменной $a успело измениться

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

Результат выполнения приведённого примера:

Parse error: syntax error, unexpected 'new' (T_NEW) in …

Подробно о ссылках рассказано в разделе «Объяснение ссылок».

Операторы арифметического присваивания

Пример Эквивалент Операция
$a += $b $a = $a + $b Сложение
$a -= $b $a = $a — $b Вычитание
$a *= $b $a = $a * $b Умножение
$a /= $b $a = $a / $b Деление
$a %= $b $a = $a % $b Модуль
$a **= $b $a = $a ** $b Возведение в степень

Операторы побитового присваивания

Пример Эквивалент Операция
$a &= $b $a = $a & $b Побитовое И
$a |= $b $a = $a | $b Побитовое ИЛИ
$a ^= $b $a = $a ^ $b Побитовое исключающее ИЛИ (Xor)
$a

$a = $a

Побитовый сдвиг влево
$a >>= $b $a = $a >> $b Побитовый сдвиг вправо

Другие операторы присваивания

Пример Эквивалент Операция
$a .= $b $a = $a . $b Конкатенация строк
$a ??= $b $a = $a ?? $b Объединение с Null

Смотрите также

  • Арифметические операторы
  • Побитовые операторы
  • Операторы объединения с null

User Contributed Notes 4 notes

13 years ago

Using $text .= «additional text»; instead of $text = $text .»additional text»; can seriously enhance performance due to memory allocation efficiency.

I reduced execution time from 5 sec to .5 sec (10 times) by simply switching to the first pattern for a loop with 900 iterations over a string $text that reaches 800K by the end.

8 years ago

Be aware of assignments with conditionals. The assignment operator is stronger as ‘and’, ‘or’ and ‘xor’.

$x = true and false ; //$x will be true
$y = ( true and false ); //$y will be false
?>

16 years ago

bradlis7 at bradlis7 dot com’s description is a bit confusing. Here it is rephrased.

echo $a , «\n» , $b ; ?>
outputs

Because the assignment operators are right-associative and evaluate to the result of the assignment
$a .= $b .= «foo» ;
?>
is equivalent to
$a .= ( $b .= «foo» );
?>
and therefore
$b .= «foo» ;
$a .= $b ;
?>

8 years ago

PHP uses a temporary variable for combined assign-operators (unlike JavaScript), therefore the left-hand-side (target) gets evaluated last.

Meaning:
$a = ($b + $c) + $a;

This can be important if the target gets modified inside the expression.

$a = 0;
$a += (++$a) + (++$a); // yields 5 (instead of 4)

  • Copyright © 2001-2024 The PHP Group
  • My PHP.net
  • Contact
  • Other PHP.net sites
  • Privacy policy

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *