Возможный сценарий
Я не могу найти, где мой код поступил не так. Вот моя полная ошибка:
Ошибка анализа: ошибка синтаксиса, неожиданный T_VARIABLE в строке x
Что я пытаюсь
$sql = 'SELECT * FROM dealer WHERE id="'$id.'"';
Ответ
Ошибка анализа: проблема с синтаксисом вашей программы, например, оставляя точку с запятой от конца инструкции или, как и в случае выше, пропускает оператор
.
.Простыми словами это синтаксическая ошибка, означающая, что в вашем коде есть что-то, что помешает правильному анализу и поэтому работает.
Что вам нужно сделать, так это внимательно проверить строки, где ошибка для любых простых ошибок.
Это сообщение об ошибке означает, что в строке x файла интерпретатор PHP ожидал увидеть открытую круглую скобку, но вместо этого он встретил нечто, называемое
T_VARIABLE
. Эта вещьT_VARIABLE
называетсяtoken
. Это способ интерпретации PHP-интерпретатора различных фундаментальных частей программ. Когда интерпретатор читает в программе, он переводит то, что вы написали, в список токенов. Где бы вы ни разместили переменную в своей программе, в списке интерпретатора есть токенT_VARIABLE
.Хорошо читается: Список токенов парсера
So убедитесь, что вы включили хотя бы
E_PARSE
в своемphp.ini
. Ошибки анализа не должны существовать в производственных сценариях.Я всегда рекомендовал добавить следующий оператор при кодировании:
error_reporting(E_ALL);
Также неплохо использовать среду IDE, которая позволит вам знать ошибки разбора при наборе текста. Вы можете использовать:
- NetBeans (прекрасный мир красоты, бесплатное программное обеспечение) (лучший, на мой взгляд)
- PhpStorm (дядя Гордон любит это: P, платный план, содержит проприетарное и бесплатное программное обеспечение)
- Eclipse (красота и зверь, бесплатное программное обеспечение)
Вопросы, относящиеся:
По этой же причине некоторые люди предпочитают добавлять личные элементы данных к «m_» или к именам интерфейсов «IFoo». Они считают, что это повышает читабельность и ясность. Согласны ли вы с такими соглашениями или нет, это вопрос вкуса.
Код является чтением simplier. Другая хорошая практика, по-моему, звонит getXXX()
в toString()
также (вместо этого тогда this.XXX
), потому что эти getXXX()
может иметь важную логику.
я думаю, что используют название атрибута без этого is'nt хорошая идея для обслуживания приложения.
Я пытаюсь использовать «this.whothing» при написании больших кусков кода, потому что было легче выяснить, на что ссылаются. При чтении больших кусков кода, написанного другими людьми, в определенные моменты я часто путался с тем, ссылаются ли они на переменные экземпляра или локальные переменные.
"это" предотвращает беспорядок с переменными экземпляра с тем же именем в родительском классе/es.
Это - в значительной степени дополнение к предварительному ожиданию с "супер".
Что-то еще нужно иметь в виду, сам язык. Вы не упомянули Java специально (хотя я предполагаю, что вы на самом деле ничего не имели в виду, так что этот комментарий больше относится к вашему сведению), но, как уже упоминалось в предыдущих постерах, это отличный способ сделать код самостоятельно. документирование для предотвращения путаницы в будущем, когда кто-то еще начинает изменять вашу кодовую базу.
Однако, если вы берете PHP, использование $this
обычно требуется при обращении к переменным класса. При разных правилах в разных языках зачастую проще придерживаться общего для них паттерна, паттерна, который, как оказалось, очень твердый стиль кодирования. Мне легче просто присоединиться this
ко всему, чем пытаться вспомнить, какой язык требует этого, а какой просто «предпочитает».
Они - возможно, Python программист и подверглись пыткам/потерялись/перепутались без явного это.
Единственное место, где я использую это, это конструкторы в классах, где некоторые / большинство полей класса могут быть предоставлены конструктором. Я использую это вместо того, чтобы использовать короткие имена для сигнатуры метода, это просто кажется более последовательным, чем сокращение.
Например, в классе «Rational»
Вместо того, чтобы делать
class Rational
{
int denominator;
int numerator;
public Rational(int d, int n)
{
denominator = d;
numerator = n;
}
}
, я делаю это.
class Rational
{
int denominator;
int numerator;
public Rational(int denominator, int numerator)
{
this.denominator = denominator;
this.numerator = numerator;
}
}
Таким образом, вызывающие абоненты узнают больше о том, для чего нужны параметры конструкторов.
Кроме устранения неоднозначности с параметрами метода, он ничего не покупает. Может быть, ясность / читабельность, но это действительно зависит от вашего стиля.
Я думаю, что нет ничего неправильно, если Вы вставляете это перед именем свойства. Это помогает снять неоднозначность свойства от локальных переменных, должен Вы иметь любого объявленного с тем же именем (который может произойти в конструкторе, когда Вы инициализируете свойства).
Это не влияет на производительность, это не создает проблем для удобочитаемости (если вообще это делает чтение легче).
, Таким образом, я не думаю, что мы должны волноваться об этом. Позвольте программистам сделать свой собственный выбор.
Небольшое в стороне, но может стоить отметить, что инструмент "Clean Up" в Eclipse может быть установлен автоматически добавить/удалить это. к членским доступам согласно предпочтению.
"Java / Стиль кода / Моются" в предпочтительном диалоге.
Это поможет вам сразу определить переменные-члены.
ToString () выше слишком мал, чтобы проиллюстрировать это.
Предположим, у вас есть метод размера экрана. Вы вычисляете, присваиваете, меняете местную переменную и переменную экземпляра. this.memberVar
или this.PropertyName
помогает вам отслеживать, где вы изменяете состояние экземпляра с помощью назначения полей или установки свойств.
В мире.NET инструмент Microsoft StyleCop также имеет правило, названное "Местные вызовы Префикса С Этим":
нарушение А этого правила происходит каждый раз, когда код содержит вызов к члену экземпляра локального класса или базового класса, который не снабжается префиксом вЂthis. ’. Исключение к этому правилу происходит, когда существует локальное переопределение участника базового класса, и код намеревается позвонить участнику базового класса непосредственно, обходя локальное переопределение. В этом случае вызов может быть снабжен префиксом вЂbase. ’, а не вЂthis. ’.
По умолчанию, StyleCop не разрешает использованию подчеркиваний или m_ отмечать поля локального класса, в пользу вЂthis. Префикс ’. Преимущество использования вЂthis. ’ - то, что это применяется одинаково ко всем типам элемента включая методы, свойства, и т.д., и не только поля, выполняя все вызовы для классификации участников, немедленно распознаваемых, независимо от которого редактор используется для просмотра кода. Другое преимущество состоит в том, что это создает быстрое, распознаваемое дифференцирование между членами экземпляра и статическими участниками, которые не являются быть снабженными префиксом.
преимущество финала А использования вЂthis. Префикс ’ является тем вводом этого. заставит Visual Studio показывать всплывающее окно IntelliSense, делая его быстрым и легким для разработчика выбрать участника класса для вызова.
Мое предложение должно выбрать, соглашение (используйте это. или не) и палка с этим.
Я чаще всего вижу, как люди делают это, потому что это вызывает интеллигентность. Я лично предпочитаю оставить это "это". потому что он создает больше кода без какого-либо значения.
Это ничего не делает на уровне языка. Но это действительно дает непосредственный признак кому-то читающему код об объеме переменной, которая улучшает понимание кода.
Иногда необходимо устранить неоднозначность:
public void setFoo(Bar foo) {
this.foo = foo;
}
В других случаях это просто стилистическая вещь. В целом, я стараюсь по возможности избегать this.blah
, поскольку это более многословно. Если вам интересно, результирующий байт-код точно такой же.