Php var


Symfony Gedmo Blameable не работает как передать переменную JavaScript в функцию php PHP: HTTP Basic – Выход из системы Zend_Session / Zend_Auth случайно генерирует сообщение об ошибке ps_files_cleanup_dir: opendir (/ var / lib / php5) не удалось: разрешение отклонено (13) &.


x442;екстовых полей ввода в For Loop? Видимость элементов PHP5 Заполните таблицу данными для отсутствующей даты (postgresql, redshift) PayPal и Php? HTML5 Audio Element "src = get.php не может пропустить позицию автономная грамматик.

x440;ования между Java и PHP Арабская передача данных между несколькими таблицами в разных базах MySQL, возвращающихся ???????? как новые значения включая php в теге <noscript> Извлечение параметров URL с регулярным выражением – повторение группы захвата

ruphp.com


PHPit.net logoКак-то я заинтересовался вопросом использования глобальных переменных в PHP-скриптах. В результате нашел статью (Using globals in PHP с PHPit.net), хорошо освещающую этот вопрос. Ниже ее вольный перевод.

Краткое содержание

В этой статье я покажу вам как правильно использовать глобальные переменные в PHP. Мы рассмотрим глобальные ключевые слова, аргументы функций и паттерны проектирования Singleton и Registry.

Введение

Всякий раз когда вы разрабатываете масштабный PHP-скрипт вам приходится использовать глобальные переменные, с того времени как вам понадобится использовать некоторые данные в разных частях вашего скрипта. Хорошими примерами таких данных являются: настройки скрипта, параметры соединения с базой данных, идентификатор юзера и другие. Есть много путей сделать эту информацию глобальной (с точки зрения доступности), но чаще всего используется метод с использованием ключевого слова global, который мы рассмотрим позже в этой статье.


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

Цель этой статьи показать вам как предотваратить эти сложности с использованием разных техник и паттернов проектирования. Для начала давайте взглянем на ключевое слово global и на принцип его работы.

Использование глобальных переменных и ключевое слово globals

По умолчанию PHP объявляет несколько переменных называемых суперглобальными которые становятся глобальными автоматически и доступны для использования из любого места скрипта, например суперглобальные массивы $_GET or $_REQUEST. Они главным образом используются для получения данных из форм и других внешних данных, и вреда от их использования нет, так как в них ничего не записывается по умполчанию.

Но вы можете использовать и собственные глобальные переменные с ключевым словом global, которое используется для импорта переменных из глобальной области видимости в локальную область видимости функции. Если вы не знаете что я имею ввиду под областью видимости, посмотрите документацию, раздел PHP Variable Scope documentation.


Следующий пример показывает использование ключевого слова global:

Как вы видите в примере, ключевое слово global используется для импорта переменной из глобальной области видимости. Выглядит красиво и просто, почему же вы должны волноваться о использовании ключевого слова keyword?

Есть три хороших причины:

1. Использовать повторно часть скрипта невозможно.
Если определенная функция зависит от глобальной переменной, становится невозможным ее использование в другом контексте. Также невозможно будет использовать эту функцию в другом скрипте.
2. Усложняется поиск ошибок
Отслеживание глобальных переменных намного сложнее локальных. Глобальная переменная может быть объявлена в подключаемом файле, на поиски которого можно потратить несколько часов, хотя хороший редактор кода / IDE помогут сделать это быстрее.
3. Усложняется разбор кода, особенно по прошествии длительного времени.
Сложно понять где была объявлена пользовательская глобальная переменная и что она делает. Вы можете знать все о каждой вашей глобальной переменной в процессе разработки, но через год вы вероятно забудете о половине из них, и будете укорять себя за использование такого их количества.

Итак если мы не можем использовать ключевое слово global, что же нам использовать? Давайте рассморим нескольно решений.


Использование аргументов функций

Один путь перестать использовать ключевое слово global это передача значений в аргументы функции, например:

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

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

Очевидно, что в реальности это не работает, и как только у нас появится новый объект нам придется добавить новый аргумент функции. Мы пойдем другим путем решения этой проблемы.

Использование паттерна проектирования Singleton

Один из путей решения проблемы – это использование Singleton-ов вместо аргументов функций. Singleton-ы специальный тип объекта котороый может быть проинициализирован только один раз, и включает статическую функцию для возврата экземпляра объекта. Пример ниже показывает простой Singleton:

Одной из важных частей примера является функция getInstance(). Эта функция позволяет создать (и вернуть) только один экземпляр объекта класса DBConnection, используя статическую переменную $me (прим пер.: Example #5 Example use of static variables http://php.net/manual/en/language.variables.scope.php).


Преимущество использования Singleton-а в том что нам не надо явно передавать объект, т.к. его можно получить вызовом функции getInstance(), например:

Есть и недостатки такого использования Singleton-ов. Во-первых, мы не можем использовать несколько объектов одного класса (отсюда название singletons). Во-вторых, singleton-ы невозможно протестировать с помощью модульного тестирования. Это практически невозможно, если не использовать некоторые хаки, которые использовать не хочется. Вот почему singleton-ы не являеются магическим решением проблемы, которое мы ищем.

Паттерн Registry

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

Простой объект класса Registry выглядит так:

Первый шаг использования класса Registry является регистрация объектов с использованием метода set():

Теперь в объекте(массиве) класса Registry содержатся все наши пользовательские объекты. Теперь мы можем подать этот один объект на функцию, вместо трех пользовательских, например так:

И что еще лучше нам не надо менять что-либо если мы добавляем свой новый объект в наш скрипт. Нам потребуется всего лишь зарегистрировать его в методом класса Registry и он незамедлительно станет доступен всем компонентам.


Чтобы упростить использование класса Registry, модифицируем его в singleton, так как объект класса Registry в нашем скрипте должен быть только один. Добавим следующий метод в класс Registry:

Теперь используем класс Registry как Singleton:

Как вы видите мы не передаем чего-либо параметром в функцию по ссылке, и мы не больше не использум ключевое слово global. Паттерн Registry это идеальное решение этой проблемы и при этом очень гибкое.

Класс-обертка Request

Хотя наш класс Registry делает излишним использование глобальных ключевых слов, в нашем скрипте все еще остается один тип глобальных переменных: Суперглобальные массивы, такие как $_POST и $_GET. Хотя эти переменные стандартные и их использование не имеет особого значения для вас, в некоторых случаях вам возможно захочется использовать класс Registry и для них.

Простым решением этой задачи является небольшой класс который будет осуществлять доступ к этим переменным, который часто называют запрос-обертка, и выглядит примерно так:

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

Пример использования класса Request:

Как вы видите мы больше не используем ключевое слово global и освободили функции от всех глобальных переменных.

Заключение

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


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

Источник: http://www.phpit.net/article/using-globals-php/

wmdn.ru

Выражения в PHP — один из основополагающих элементов. Всё, что вы пишете — это выражения. Иными словами, выражение — это всё, что имеет значение. Для практической работы очень важно понимать как принципы построения выражений так и то, как их анализирует и исполняет PHP.

Самое простое выражение в PHP — присвоение значения.

 $var = 'value'; 

Это выражение читается как «переменной с именем $var присвоить значение ‘value'» или «для переменной с именем $var установить значение ‘value'».

Все выражения в PHP должны завершаться точкой с запятой, а части выражения разделаются операторами. Если точки с запятой или оператора нет — компилятор выдаст ошибку.

В общем виде простые выражения PHP можно представить в виде схемы:


  <оператор> <переменная> <оператор> <значение> <;> 

В выражениях PHP, строго говоря, все элемены являются необязательными, кроме точки с запятой. Но если какой-то элемент есть, то должны быть и все элемены, которые должны быть по схеме слева.

Например, все эти выражения допустимы (хотя и не все имеют смысл):

 <?php  ; // пустой оператор  $var1;  $var1++;  $var1 = 'value'; ?> 

Можно писать в одну строку множество выражений, просто разделяя их точкой с запятой. Например, следующие два блока совершенно одинаковы с точки зрения PHP:

 <?php  $var1 = 'вася'; $var2 = 'петя'; $var3 = 'коля'; ?>  <?php  $var1 = 'вася';  $var2 = 'петя';  $var3 = 'коля'; ?> 

А эта строка вызовет ошибку. Интерпретатор не cможет правильно определить границы и будет считать всю строку одним некорректным выражением, т.к. нет операторов-разделителей между отдельными блоками.

 <?php  $var1 = 'вася' $var2 = 'петя' $var3 = 'коля' ?> 

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

 <?php  $n = 'Вася';  $f = ' Иванов';  $result = $n . $f;  echo $result; ?> 

полностью аналогичен этому фрагменту

 <?php  $result = ($n = 'Вася') . ($f = ' Иванов');  echo $result; ?> 

Оператор «.» (точка) используется в PHP для объединения двух строк в одну.

Составные выражения интерпретатор анализирует, выбирает наиболее глубоко вложеные выражения и выполняет их. После этого подставляет результаты в более крупное выражение, вычислят их и т.д, пока не будет вычислено всё выражение.

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

Например, при выполнении кода

  $k = 3;  $n = (($f = 1000/$k + 3) > 100);  echo $n; 

PHP следает следующие шаги:

  • Шаг 1: $k = 3;
  • Шаг 2: $t1 = 1000/$k
  • Шаг 3: $t2 = $t1 + 3
  • Шаг 4: $f = $t2
  • Шаг 5: $t3 = ($f > 100)
  • Шаг 6: $n = $t3
  • Шаг 7: echo $n

Все выражения PHP разделяются на две больших группы (по типу значений): скалярные и комплексные. К скалярным значениям относятся только те, которые нельзя «разобрать» на осмысленные составляющие. Пример скалярного значения — строка. Конечно, можно разделить строку на отдельные символы, но это уже будет не строка, а бессмысленный набор символов.

Скалярные значения подразделяются на целочисленные, числовые с плавающей точкой, строковые и логические.Особенности работы PHP с различными типами значений мы рассмотрим в следующем уроке.

Примеры скалярных выражений:

  // строковые  $str = 'я - строка';  $str .= ' PHP';   // целочисленные  $k = 3;  $k += 10;   // числовые с плавающей точкой  $float = 11.23;  $otherFloat = $float/100;   // логические  $x == $y;  $z > 100;  

Комплексные выражения могут быть разделены на части так, что каждая часть будет иметь какой-то смысл. Таких выражений в PHP 2: массивы и объекты, но о них мы поговорим в соответствующих уроках.

Php varВ начало страницы

Php varВ начало страницы

on-line-teaching.com

Функция var_dump() и объекты

Что касается работы с объектами, то все свойства объекта (общедоступные, закрытые и защищенные) будут возвращены при выводе, если только объект не реализует метод __debugInfo() (добавлен в PHP 5.6.0).

Магический метод __debugInfo() срабатывает, когда объект вызывается функцией var_dump(), то есть необходимо вывести список свойств объекта. Если этот метод не определен в объекте, тогда будут выведены все public, protected и private свойства объекта.

Давайте рассмотрим пример:

<!-- Для удобочитаемости результата добавляем тег <pre> --> <pre> <?php // создаём класс Ex class Ex {  private $var;   // конструктор класса задаёт значение приватному свойству $var  public function __construct($val) {  $this->var = $val;  }   // метод __debugInfo переопределяет значение свойства $var  public function __debugInfo() {  return [  '$varSquared' => $this->var ** 2,  ];  } }  // в функции var_dump() создаём объект класса Ex var_dump( new Ex(8) );

Мы видим, что var_dump показывает нам наличиние в объекте свойства varSquared, хотя это свойство определено в методе __debugInfo(), как и его значение.

komotoz.ru

Приоритет операторов

Начнём с того, что операторы имеют разный приоритет. Как, например, в математике: оператор умножения будет более приоритетным по сравнению с оператором сложения:

<?php $result = 2 + 2 * 2; var_dump($result);

Результат:

int 6

Приоритетом можно управлять с помощью круглых скобок, например:

<?php $result = (2 + 2) * 2; var_dump($result);

Ну и тут думаю всё понятно:

int 8

В целом приоритеты операторов довольно предсказуемы.
Приоритет всех операторов в PHP можно посмотреть в официальной документации.

Типы операторов в PHP

А теперь давайте рассмотрим разные типы операторов

Арифметические операторы

Тут нас ждут знакомые со школьной скамьи операторы:

<?php  $a = 6; $b = 3;  // Сложение var_dump($a + $b);  // Вычитание var_dump($a - $b);  // Умножение var_dump($a * $b);  // Деление var_dump($a / $b);  // Остаток от деления var_dump($a % 4);  // Возведение в степень var_dump($a ** 2);

Результат:

int 9
int 3
int 18
int 2
int 2
int 36

Многие впадают в ступор от оператора остатка от деления. Тут всё просто. В нашем случае мы вычисляем остаток от деления 6 на 4. Нацело не делится, целая часть – 1, и 2 в остатке. Ещё несколько аналогичных примеров для понимания:

<?php var_dump(5 % 2); var_dump(17 % 12); var_dump(8 % 4);

Результат:

int 1
int 5
int 0

Думаю, арифметические операторы больше не требуют дополнительных разъяснений.

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

С ним мы уже работали. Используется для присваивания какого-либо значения в переменную.
Классический пример:

<?php $a = 55;

Ок, тут всё просто. А как на счёт такого:

<?php $result = ($x = 5) * 2;

Здесь переменной $x присвоили значение 5, а затем умножили на 2 и положили результат выражения в переменную $result. Да, в PHP так тоже можно, хоть и не приветствуется, так как код выглядит довольно запутанно.

Помимо этого есть так называемые сокращенные, комбинированные операторы присваивания.
Например, в комбинации с оператором сложения:

<?php  $x = 5; $y = 7;  $y += $x;  var_dump($y);

Результат:

int 12

Здесь

$y += $x

можно было бы записать как

$y = $y + $x

Таким образом, если что-то совершается с левым операндом в исходном виде, то можно использовать эти сокращённые варианты. И да, это применяется и выглядит весьма элегантно, стоит к ним привыкать уже сейчас. Давайте рассмотрим ещё несколько примеров:

<?php  $x = 6; $y = 3;  $x /= $y;  var_dump($x);

Результат:

int 2

И с конкатенацией строк:

<?php  $hello = 'Hello ';  $hello .= 'world!';  var_dump($hello);

Результат:

string ‘Hello world!’ (length=12)

Ок, идём дальше.

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

Ну тут из названия понятно, что это за операторы и для чего они предназначены. Результатом их работы всегда будет булево значение (true или false).

Начнём с операторов равенства/неравенства:

<?php  $x = 2; $y = '2';  var_dump($x == $y); //проверка на равенство var_dump($x === $y); //проверка на тождественное равенство var_dump($x != $y); //проверка на неравенство var_dump($x !== $y); //проверка на тождественное неравенство

Результат:

boolean true
boolean false
boolean false
boolean true

Давайте поясню. Оператор == приводит операнды к одному типу и после сравнивает их значения. Так строка ‘2’ была преобразована к числу и значения оказались равными.
Оператор тожественного равенства === не выполняет приведения типов и сравнивает сначала то, что типы значений идентичны, например, целые числа, а затем сравнивает их значения. И если они одинаковы, то только в таком случае возвращает true.

Например:

<?php  $x = 2; $y = 2;  var_dump($x === $y);

Результат:

boolean true

Оператор неравенства != приводит типы к одному и сравнивает значения. Если они не равны, вернёт true, иначе – false.
Оператор тождественного неравенства !== сначала сравнивает типы, если они не идентичны, например, строка и число, то вернёт true, иначе сравнит их значения. Если они не равны, вернёт true, иначе – false.

Также к операторам сравнения относятся:

<?php  $x = 2; $y = 4;  var_dump($x > $y); // $x больше $y var_dump($x < $y); // $x меньше $y var_dump($x >= $y); // $x больше или равно $y var_dump($x <= $y); // $x меньше или равно $y

Результат:

boolean false
boolean true
boolean false
boolean true

Тут всё очевидно, не будем задерживаться.

Spaceship

А теперь рассмотрим оператор сравнения, который появился в PHP7. Это спейсшип (или космический корабль) <=>. Похож на корабль штурмовиков из звёздных войн, не так ли?

Логика у этого оператора следующая:
$a <=> $b
Если $a > $b, вернёт 1
Если $a == $b, вернёт 0
Если $a < $b, вернёт -1

Давайте рассмотрим пример:

<?php  var_dump(2 <=> 4); var_dump(2 <=> 2); var_dump(5 <=> 3);

Результат:

int -1
int 0
int 1

Данный оператор был введён для использования в функциях сортировки. Эту тему мы пока поднимать не будем, просто знайте, что вот такой интересный оператор появился в последней версии PHP.

Инкремент и декремент

Зачастую в разных алгоритмах приходится увеличивать и уменьшать целые числа на единицу.
Для этого существуют специальные операторы инкремента и декремента.
Варианты могут быть самыми разными:

  • $i++ — постфиксный инкремент, возвращает текущее значение $i, а затем увеличивает значение на единицу
  • $i— — постфиксный декремент, возвращает текущее значение $i, а затем уменьшает значение на единицу
  • ++$i – префиксный инкремент, сначала увеличивает значение переменной $i на единицу, а затем возвращает результат
  • —$i – префиксный декремент, сначала уменьшает значение переменной $i на единицу, а затем возвращает результат

Давайте рассмотрим несколько простых примеров:

<?php  $i = 5;  $x = $i++; // Сначала переменной $x присвоили текущее значение $i (5), затем $i увеличили на 1 (6) $y = ++$i; // Сначала переменную $i увеличим на 1 (7), затем присвоили новое значение переменной $y (7) $z = $i--; // Сначала $z присвоили значение $i (7), затем уменьшили $i на 1 (6)  var_dump($x); var_dump($y); var_dump($z); var_dump($i);

Результат:

int 5
int 7
int 7
int 6

С инкрементом и декрементом на этом всё. Идём дальше.

Логические операторы

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

  • && — логическое И, вернёт true, только если оба операнда истинны (true)
  • || — логическое ИЛИ, вернёт true, если хотя бы один из операндов является истинным
  • ! – ОТРИЦАНИЕ, возвращает true, если операнд – false, и наоборот. Применяется если нужно инвертировать условие, зачастую это очень кстати.
  • xor – исключающее ИЛИ, вернёт true, только если один из операторов true, а другой – false

Давайте посмотрим на примере:

<?php  var_dump(true && true); // Результат: true var_dump(true && false); // Результат: false var_dump(true || true); // Результат: true var_dump(true || false); // Результат: true var_dump(false || true); // Результат: true var_dump(!true); // Результат: false var_dump(!false); // Результат: true var_dump(false xor true); // Результат: true var_dump(true xor true); // Результат: false var_dump(true xor false); // Результат: true var_dump(false xor false); // Результат: false

А теперь давайте более интересно – определим, является ли число чётным и при этом оно больше 10. Для того, чтобы проверить на чётность – достаточно взять остаток от деления на 2 и сравнить с нулём. Если будет 0, то число чётное. Давайте напишем первое вычисление:

<?php  $x = 14;  $isEven = $x % 2 == 0;  var_dump($isEven); // true

А теперь второе:

<?php  $x = 14;  $isEven = $x % 2 == 0;  var_dump($isEven); // true  $isMoreThan10 = $x > 10;  var_dump($isMoreThan10); // true

Остаётся сделать так, чтобы выполнились оба условия. Воспользуемся логическим И:

<?php  $x = 14;  $isEven = $x % 2 == 0;  var_dump($isEven);  $isMoreThan10 = $x > 10;  var_dump($isMoreThan10);  $isEvenAndMoreThan10 = $isEven && $isMoreThan10;  var_dump($isEvenAndMoreThan10);

Вычисление можно было бы выразить и одной строкой:

<?php  $x = 14;  $isEvenAndMoreThan10 = $x % 2 == 0 && $x > 10;

Однако, согласитесь, первый вариант разбит по пунктам и более понятен. Я хочу, чтобы Вы поняли. Ваш код не должен занимать как можно меньше места. Он должен быть понятен. Можно сказать, будет очень неплохо, если он будет скучен. Он должен легко читаться программистами. В первом случае всё очевидно: выяснили, что число чётное, что оно больше 10, и решили, что оба эти условия выполняются одновременно. Вот как-то так должен мыслить человек, читающий Ваш код.

И ещё, если операнды не являются булевыми значениями, они будут автоматически приведены к true или false. Оставим это на самостоятельное ковыряние – в домашнем задании будет пункт, касательно этого замечания. Обязательно выполните его.

Строковый оператор конкатенации

Да-да, для строк существует только один оператор – для их объединения в одну: оператор конкатенации. Он представляет из себя точку и его использование выглядит следующим образом:

<?php  $string1 = 'Привет'; $string2 = 'мир!';  echo $string1 . ', ' . $string2;

Результат:

Привет, мир!

На этом заканчивается наш урок по операторам. Обязательно выполните домашку, без неё дальше не пойдёт.

webshake.ru

Зачем нужны print_r и var_dump?

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

Нам на экраны выдаст следующий результат:

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

Как видно из кода, print_r записывается между тегами pre, и в результате видим следующую картину:

Особенность тега pre еще и в том, что он отображает все символы пробелов, если вы указываете много пробелов, они записываются как один:
«По умолчанию, любое количество пробелов идущих в коде подряд, на веб-странице показывается как один.»
То есть, такая запись:

Выдаст:

Для массивов считаю что print_r это инструмент номер один ?

Зачем нужен var_dump?

Для обычных переменный, которые содержат строки, числа и т.д. есть простые способы вывода — echo и print. Но иногда этого недостаточно, в PHP у каждого значения есть свой тип. Есть правда неприятная особенность, тип может меняться, и запись:

Выдаст следующее значение:

Хотя мы передали одно число и одну строку. var_dump позволяет узнать к какому типу данных относится значение:

int сокращение от integer — целое число. Записывается не сложнее чем print_r:

Тип данных это важная вещь, но лично я print_r`ом пользуюсь гораздо чаще.

print_r и var_dump в 1С-Битрикс

В битриксе есть файл, который выполняется при каждой загрузке страницы — init.php, и для того чтобы каждый раз не писать много кода, можно записать 2 простые функции:

После записи можно передавать переменную, и что самое главное, массив. Запись для вызова будет следующая:

При работе с языком программирования PHP, это базовые вещи, которые помогут сэкономить ваше время :).

forwww.com

В первом примере создается копия значения, а вторая использует ссылку на исходное значение. Поэтому после первого foreach исходный массив все еще не тронут. После второго foreach исходный массив мог быть изменен, так как он обрабатывался ссылкой.

Некоторые собственные PHP-функции уже работают таким образом, как shuffle() который перестраивает содержимое вашего массива. Вы заметите, что эта функция не возвращает массив, вы просто называете это:

 $myArray = array('foo', 'bar', 'fizz', 'buzz'); shuffle( $myArray ); // $myArray is now shuffled 

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

Тогда есть функции, которые ничего не передают по ссылке, а скорее имеют дело с копией исходного значения, например, ucwords() который возвращает новую результирующую строку:

 $myString = "hello world"; $myString = ucwords( $myString ); // $myString is now capitalized 

См. « Передача по ссылке» .

ruphp.com


You May Also Like

About the Author: admind

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.