В месяце должно быть достаточно времени, чтобы представить себя PHP. PHP обычно включает в себя другие технологии, такие как HTML, SQL, XML и т. Д., И вы можете узнать, что их изучать (если вы еще не знаете их) занимает немного больше времени.
Для простого интерактивного веб-сайта вы вам нужно узнать следующее:
Благоприятное сбережение PHP заключается в том, что справочные материалы на php.net превосходны, и руководство в целом неплохое. Однако есть много особенностей, и я не думаю, что есть что-то, кроме опыта, чтобы помочь вам в этом.
Если вы хотите начать с правой ноги, прочитайте на PHP объектной модели и просмотрите стандартную библиотеку . PHP имеет множество встроенных функций, а также имеет множество функций быстрого доступа, которые могут сэкономить ваше время, например file_get_contents () и fgetcsv () .
Некоторые инструменты, которые я считаю полезными:
Если вы хотите получить книгу на PHP, лучшее, что я могу порекомендовать кому-то с опытом программирования, это PHP Cookbook из Ореилли. Он покажет вам, как выполнять общие задачи «путь PHP», и вы можете быстро искать функции, которые вы не узнаете на php.net .
var o = {p: 42, q: true};
var {p, q} = o;
Здесь var {p,q} = o
является просто сокращением для var {p:p , q:q} = o
. Рассмотрим это.
var o = { key : "value" };
var { key : local_var } = o ;
local_var === o["key"] // true
Если вы опускаете local_var и записываете var {key} = o;
новый ключ переменной будет создан с помощью ключа ключа idenifier. То же самое, что и делать var key = o["key"]
Итак, в вашем примере это похоже на выполнение
var p = o["p"] ; //42
var q = o["q"]; //true
var a = o["a"]; // undefined
var b = o["b"]; //undefined
Это может быть не совсем правда, но должен помочь вам понять это. Это нечто вроде Pattern Matching, которое предоставляют другие языки, но это другое.
Это потому, что, используя ваш синтаксис для разрушения объекта, имена, используемые в выражении LHS ({a, b}
), используются в качестве ключей в выражении RHS (o
). Поскольку a
и b
не являются свойствами o
, это терпит неудачу (возвращает undefined
).
Соответствующий раздел в спецификации для этого находится в Сроки выполнения Runtime: DestructingAssignmentEvaluation в AssignmentProperty: Инициализатор инициализации идентификатора (второй из последних). AssignmentProperty - это ваши a
(и b
... отдельно) и. StringValue a
является 'a'
и используется как ключ для получения значения из o
(в этом случае эквивалент o['a']
).
Это сработает, если вы это сделаете :
var {p:a, q:b} = o;
, который использует AssignmentProperty: PropertyName: AssignmentElement (последняя запись), которая использует имя свойства (p
) и элемент назначения (a
).
a
и b
являются идентификаторами. p
и q
являются идентификаторами в var {p, q}
. Но 'p'
и 'q'
являются свойствами (ключами) в словаре o
, которые являются строковыми примитивными литералами. что вы подразумеваете под именем соответствия?
– overexchange
10 August 2015 в 09:20
p
& amp; q
- свойства o
. На них можно ссылаться как строковые ключи, используя нотацию object['key']
(o['p']
) или через нотацию object.key
(o.p
). В любом случае это не связано с этой проблемой. Глобальный p
& amp; q
переменные не играют никакой роли в этом сценарии.
– Amit
10 August 2015 в 09:24
o = {p:1, q:2}
, здесь нет строковых литералов. p
и q
- фактически имена идентификаторов i>. Обозначение литерала объекта допускает строковые литералы i>, число литералов i> и имен идентификаторов i> как «ключи». ES6 также вводит имена вычисленных свойств i>. Как нечто выраженное в синтаксисе и представленное в памяти может отличаться. Если вы говорите о «литералах», то вы говорите о синтаксисе i>, а не о времени выполнения.
– Felix Kling
10 August 2015 в 18:19
var o = {p: 42, q: true};
, а затемvar {a:var1, b:var2} = o;
это не работает.'a'
и'b'
,'p'
и'q'
являются строковыми литералами. – overexchange 10 August 2015 в 10:05