Intereting Posts
Групповой массив по значению ключей Unset rows (основано на имени строки) csv через php PHP getimagesize с переменной Несколько fbAsyncInit? fwrite () и UTF8 Какая лучшая кодировка символов для японского языка для отображения DB, php и html? Отображение 5 строк данных из запроса Ошибка при использовании -> paginate () с Laravel Автозаполнение текстового поля с помощью DOJO PHP-массив копирует определенные ключи, встроенные функции? Производительность вложенного контура? Как заставить символ замены превращаться в объект html в PHP? laravel вставить новую строку, которая имеет ключ из другой таблицы и нулевые столбцы PHP 5.3 Пространства имен следует использовать каждую функцию PHP с обратным слэшем? Невозможно использовать буферизацию вывода в обработчиках отображения буферизации вывода Laravel 4 – Как использовать «смещение» вместо «страницы» с помощью Eloquent's -> paginate ()?

Есть ли указатели в php?

Что означает этот код? Это как вы объявляете указатель в php?

$this->entryId = $entryId; 

    Имена переменных в PHP начинаются с $ so $ entryId – это имя переменной. $ это специальная переменная в объектно-ориентированном программировании в PHP, которая ссылается на текущий объект. -> используется для доступа к члену объекта (например, свойствам или методам) в PHP, как и синтаксис в C ++. поэтому ваш код означает следующее:

    Поместите значение переменной $ entryId в поле entryId (или свойство) этого объекта.

    Оператор & в PHP означает ссылку на ссылку. Вот пример:

     $b=2; $a=$b; $a=3; print $a; print $b; // output is 32 $b=2; $a=&$b; // note the & operator $a=3; print $a; print $b; // output is 33 

    В приведенном выше коде, поскольку мы использовали & operator, ссылка на то, где указывается $ b, хранится в $ a. Таким образом, $ a на самом деле является ссылкой на $ b.

    В PHP аргументы передаются по значению по умолчанию (вдохновлены C). Поэтому при вызове функции, когда вы передаете свои значения, они копируются по значению не по ссылке. Это значение по умолчанию В САМЫХ СИТУАЦИЯХ. Однако при определении функции существует способ прохождения по эталонному поведению. Пример:

     function plus_by_reference( &$param ) { // what ever you do, will affect the actual parameter outside the function $param++; } $a=2; plus_by_reference( $a ); echo $a; // output is 3 

    Существует множество встроенных функций, которые ведут себя так. Подобно функции sort (), которая сортирует массив, будет влиять непосредственно на массив и не будет возвращать другой отсортированный массив.

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

    Когда вы копируете переменную в другую, PHP копирует ссылку на первую переменную во вторую переменную. Итак, ваша новая переменная, на самом деле, является ссылкой на первую до сих пор. Значение еще не скопировано. Но если вы попытаетесь изменить любую из этих переменных, PHP сделает копию значения, а затем изменяет переменную. Таким образом, у вас будет возможность сохранить память и время, ЕСЛИ ВЫ НЕ ИЗМЕНИТЬ ЗНАЧЕНИЕ.

    Так:

     $b=3; $a=$b; // $a points to $b, equals to $a=&$b $b=4; // now PHP will copy 3 into $a, and places 4 into $b 

    После этого, если вы хотите поместить значение $ entryId в свойство 'entryId' вашего объекта, приведенный выше код будет делать это и не будет копировать значение entryId, пока вы не измените какой-либо из них, не получите меньше памяти Применение. Если вы действительно хотите, чтобы оба они указывали на одно и то же значение, используйте следующее:

     $this->entryId=&$entryId; 

    Нет, как говорили другие: «В PHP нет указателя». и я добавляю, нет ничего RAM_related в PHP.

    А также все ответы ясны. Но остались моменты, которые я не мог устоять!

    Есть ряд вещей, которые действуют аналогично указателям

    • eval (мой любимый, а также опасный)
    • Переменная $ GLOBALS
    • Дополнительный знак '$' перед переменными ( например, упомянутый prathk )
    • Рекомендации

    Первый

    Сначала я должен сказать, что PHP – действительно мощный язык, зная, что существует конструкция с именем «eval», поэтому вы можете создать свой PHP-код во время его запуска! (очень круто!)

    хотя существует опасность PHP_Injection, которая намного более разрушительна, чем SQL_Injection. Осторожно!

    пример:

    Код:

     $a='echo "Hello World.";'; eval ($a); 

    Вывод

    Привет мир.

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


    Второй

    $ GLOBAL очень полезна, вы можете получить доступ ко всем переменным, используя свои ключи.

    пример:

    Код:

     $three="Hello";$variable=" Amazing ";$names="World"; $arr = Array("three","variable","names"); foreach($arr as $VariableName) echo $GLOBALS[$VariableName]; 

    Вывод

    Привет, Удивительный мир

    Примечание. Другие суперглобалы могут делать один и тот же трюк в меньших масштабах.


    Третий

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

    пример:

    Код:

     $a="b"; $b="c"; $c="d"; $d="e"; $e="f"; echo $a."-"; echo $$a."-"; //Same as $b echo $$$a."-"; //Same as $$b or $c echo $$$$a."-"; //Same as $$$b or $$c or $d echo $$$$$a; //Same as $$$$b or $$$c or $$d or $e 

    Вывод

    BCDEF


    Последний

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

    пример 1:

    Код:

     $a="Hello"; $b=&$a; $b="yello"; echo $a; 

    Вывод

    Yello

    пример 2:

    Код:

     function junk(&$tion) {$GLOBALS['a'] = &$tion;} $a="-Hello World<br>"; $b="-To You As Well"; echo $a; junk($b); echo $a; 

    Вывод

    -Привет мир

    -Также и для тебя

    Надеюсь, поможет.

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

    Синтаксис, который вы цитируете, в основном тот же, что и доступ к элементу из указателя на класс в C ++ (тогда как точечная нотация используется, когда это не указатель.)

    Чтобы ответить на вторую часть вашего вопроса – в PHP нет указателей.

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

    Это зависит от версии PHP, которую вы используете.

    entryId – это свойство экземпляра текущего класса ($ this) И $ entryId – это локальная переменная

    Да, что-то похожее на указатели в PHP, но может не совпадать с тем, что именно происходит в c или c ++. Ниже приведен один из примеров.

     $a = "test"; $b = "a"; echo $a; echo $b; echo $$b; //output test a test 

    Это иллюстрирует аналогичную концепцию указателей в PHP.

    Вы можете в какой-то степени смоделировать указатели на объекты-экземпляры:

     class pointer { var $child; function pointer(&$child) { $this->child = $child; } public function __call($name, $arguments) { return call_user_func_array( array($this->child, $name), $arguments); } } 

    Используйте следующее:

     $a = new ClassA(); $p = new pointer($a); 

    Если вы пройдете $ p вокруг, он будет вести себя как указатель C ++ относительно вызовов методов (вы не можете напрямую коснуться объектных переменных, но это зло в любом случае :)).

    PHP передает массивы и объекты по ссылке (указатели). Если вы хотите передать нормальную переменную Ex. $ var = 'boo'; затем используйте $ boo = & $ var ;.

    PHP может использовать что-то вроде указателей:

     $y=array(&$x); 

    Теперь $ y действует как указатель на $ x и $ y [0] разыменовывает указатель.

    Массив значений (& $ x) является просто значением, поэтому его можно передать в функции, сохранить в других массивах, скопировать в другие переменные и т. Д. Вы даже можете создать указатель на эту переменную указателя. (Сериализуя это приведет к разрыву указателя.)