$this
- специальная переменная в PHP , которая не может быть назначена. Если он доступен в контексте, где он не существует, эта фатальная ошибка указывается.
Эта ошибка может возникнуть:
class Foo {
protected $var;
public function __construct($var) {
$this->var = $var;
}
public static function bar () {
// ^^^^^^
echo $this->var;
// ^^^^^
}
}
Foo::bar();
Как исправить: снова просмотрите свой код, $this
может использоваться только в контексте объекта и никогда не должен использоваться в статическом методе. Кроме того, статический метод не должен обращаться к нестатистическому свойству. Используйте self::$static_property
для доступа к статическому свойству. $this
переменная. Как исправить: Просмотрите код и замените $this
на другую переменную замещения. Вопросы, относящиеся:
Это - символ для универсальный параметр типа . Это могло точно также быть что-то еще, например:
public class SomeBase<GenericThingy> where GenericThingy : SomeBase<GenericThingy>, new()
Только T является значением по умолчанию один используемый и поощренный Microsoft.
T не является серовато-синим ключевым словом, а заполнитель для универсального типа. Посмотрите Microsoft Введение в Дженерики
, эквивалентный синтаксис VB.Net был бы:
Public Class SomeBase(Of T As {Class, New}))
Хороший пример другого имени использовал вместо T would
быть классами хэш-таблицы, например,
public class Dictionary<K,V> ...
, Где K
обозначает Ключ и V
для значения. Я думаю T
, обозначает тип.
Вы, возможно, видели это вокруг. Если можно установить связь, это должно быть довольно полезно.
Лучший способ состоял бы в том, чтобы вовлечь себя знакомый с "Дженериками", многими ресурсами в сети, вот один
, T не является ключевым словом, а именем, могло быть что-либо действительно, насколько я знаю, но T является соглашением (когда только один тип необходим курса)
Это было бы "Дженериком". Как люди уже упомянули, существует объяснение Microsoft из понятия. Что касается того, почему "T" - видят этот вопрос .
, Короче говоря это позволяет Вам создавать класс/метод, который специализирован к определенному типу. Классический пример System.Collections.Generic.List<T>
класс. Это совпадает с System.Collections.ArrayList
, за исключением того, что это позволяет Вам хранить только объект типа T
. Это обеспечивает безопасность типов - Вы не можете (случайно или иначе) помещенные объекты неправильного типа в Вашем списке. System.Collections.Generic
пространство имен содержит несколько других различных типов набора, которые используют это.
Что касается того, где Вы могли использовать его - Вам решать Существует много примеров использования, которые время от времени подходят. Главным образом это - некоторый самодельный набор (когда встроенные не достаточны), но это могло действительно быть что-либо.
Эти T
название параметра типа в универсальном классе. Это обозначает "Тип", но Вы могли точно также назвать его "Alice".
Вы используете дженерики для увеличения возможности многократного использования безопасным с точки зрения типов способом, напрасно не копируя код. Таким образом Вы не должны писать классы для ListOfIntegers
, ListOfStrings
, ListOfChars
, ListOfPersons
и так далее, но можете вместо этого записать универсальный класс List<T>
и затем инстанцировать объектов типов List<Int32>
, List<string>
, List<char>
и List<Person>
. Компилятор делает работу для Вас.
Это означает "любой класс". Это мог быть "B", "A", безотносительно. Я думаю, что T используется из-за "Шаблона"