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

Вы можете использовать библиотеку Json.NET для декодирования строки. Десериализатор автоматически декодирует строку.

public class Example
{
    public String Name { get; set; }
}
// 
var i = @"{ ""Name"" : ""Eduardo Fonseca Bola\u00c3\u00b1os comparti\u00c3\u00b3 una publicaci\u00c3\u00b3n."" }";
var jsonConverter = Newtonsoft.Json.JsonConvert.DeserializeObject(i);

// Encode the string to UTF8
byte[] bytes = Encoding.Default.GetBytes(jsonConverter.ToString());
var myString = Encoding.UTF8.GetString(bytes);
Console.WriteLine(myString);

// Deserialize using class
var sample = Newtonsoft.Json.JsonConvert.DeserializeObject(i);
byte[] bytes = Encoding.Default.GetBytes(sample.Name);
var myString = Encoding.UTF8.GetString(bytes);
Console.WriteLine(myString);

Выход:

{
  "Name": "Eduardo Fonseca Bolaños compartió una publicación."
}

Вариант 2

Вы можете использовать метод System.Web.Helpers.Json.Decode . Вам не нужно будет использовать какие-либо внешние библиотеки.

50
задан TStamper 13 April 2009 в 16:49
поделиться

6 ответов

Имена переменных в PHP начинаются с $, поэтому $ 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

В приведенном выше коде, поскольку мы использовали оператор &, ссылка на то, куда указывает $ 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;
157
ответ дан Sergey Telshevsky 7 November 2019 в 10:27
поделиться

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

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

9
ответ дан Anthony 7 November 2019 в 10:27
поделиться

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

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

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

4
ответ дан Toby Hede 7 November 2019 в 10:27
поделиться

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

2
ответ дан Rich 7 November 2019 в 10:27
поделиться

PHP passes Arrays and Objects by reference (pointers). If you want to pass a normal variable Ex. $var = 'boo'; then use $boo = &$var;.

0
ответ дан 7 November 2019 в 10:27
поделиться

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

$y=array(&$x);

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

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

0
ответ дан 7 November 2019 в 10:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: