Подтвердить что ты не робот

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

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

$this->entryId = $entryId;
4b9b3361

Ответ 1

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

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

Оператор и PHP в 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

В приведенном выше коде, поскольку мы использовали и оператор, ссылка на то, где указывает указатель $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;

Ответ 2

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

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

Существует ряд вещей, которые действуют как указатели

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

Первый

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

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

Пример:

Код:

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

Выход

Hello World.

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


Второй

Переменная

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

Пример:

Код:

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

Выход

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

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


Третий

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

Пример:

Код:

$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

Выход

B-C-D-е-е


Последний

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

пример 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;

Выход

-Hello World

-Для вас, как хорошо

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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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

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

//output
test
a
test

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

Ответ 7

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

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 вокруг, он будет вести себя как указатель С++ относительно вызовов методов (вы не можете напрямую коснуться объектных переменных, но это зло в любом случае:)).

Ответ 8

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

Ответ 9

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

$y=array(&$x);

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

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