Если Вам нравится использовать различные типы определенной длины и со знаком, Вы, вероятно, более обеспечены с uint8_t, int8_t, uint16_t, и т.д. просто, потому что они делают точно, что они говорят.
Вы используете static , когда хотите использовать метод / переменную, не привязанную к экземпляру. Это может произойти, когда:
Нет никакой связи с вашей целью и экземпляром (полезно для наборов инструментов на языках, которые не допускают ничего, кроме ООП, например Java, но бесполезны в PHP).
Вы хотите контролировать доступ к экземпляру. Чаще всего экземпляр, с которым вы хотите иметь дело, не определяется при написании кода, но будет выполняться. Шаблон Singleton является лучшим примером. Вы можете использовать статические методы в качестве фабрик для создания объекта в соответствии с контекстом или совместного использования ресурсов с другими экземплярами. EG: статический член может предоставлять доступ к уровню базы данных, поэтому часть приложения получает доступ к тому же самому слою из любого места, и оно открывается / закрывается без конфликтов.
Представления имеют значение, и метод будет выполняться много раз. В этом случае вы сэкономите некоторое время процессора, не позволяя интерпретатору искать член экземпляра при каждом вызове. Но все же, если перфоманс становится такой проблемой, что вы придете к этому решению, возможно, пора пересмотреть свою архитектуру или использование привязки к более быстрому языку для критических частей кода.
У вас есть метод, который относится к типу, но будет применяться к другому. Может иметь смысл записать метод в объявление первого типа, но установить его статическим, поскольку он ожидает экземпляр другого типа.
Прекрасным примером является анализатор строк:
class MyObject
{
static function parse($str)
{
$obj = new MyObject();
// some parsing/setting happens here
return $obj;
}
}
// you create an object "MyObject" from a string, so it's more obvious
// to read it this way :
$new_obj = MyObject::parse("This a description of a super cool object");
Статические функции и переменные используются для доступа к переменным / функциям в глобальной области, например:
echo myClass::myVariable;
echo myClass::myFunction();
Когда что-то статично, к нему можно получить доступ где угодно, и это очень похоже на процедурное type, за исключением того, что она может использовать self и содержится в области классов.
class myClass{
static $myVariable = "myVar";
static function myFunction()
{
return "myFunc";
}
}
Один из способов ее использования - сохранить только один экземпляр класса или Singleton Method.
class myClass
{
static $class = false;
static function get_connection()
{
if(self::$class == false)
{
self::$class = new myClass;
}
else
{
return self::$class;
}
}
private function __construct()
{
// my constructor
}
// Then create regular class functions.
}
Поскольку у него есть частный конструктор , его нельзя создать с помощью оператора new
, поэтому вы вынуждены вызывать myClass :: get_connection ()
, чтобы получить класс. Эта функция может создать новый класс (потому что он является членом класса). Затем он сохраняет класс в статической переменной, и если вы снова вызовете функцию, она просто вернет созданный класс.
В конце концов, ключевое слово static используется для хранения вещей, ну, static, в отношении области видимости. Это означает, что вы не хотите, чтобы что-либо «менялось» из-за текущего объема. Хотя метод Singleton немного расширяет его, он придерживается той же идеи, что у вас всегда есть «один и тот же» класс, независимо от того, в какой области вы находитесь.
Документация PHP
Статическое ключевое слово
Оператор разрешения области
StackOverflow Knowledge
Как избежать использования глобальных объектов PHP
Совместное использование переменных между функциями в PHP без использования глобалов
Обеспечение доступности глобальной переменной для каждой функции внутри класса
Глобальный или синглтон для подключения к базе данных
Классы PHP: когда использовать :: vs. ->?
Вот случайное, хотя довольно хорошее описание различий между статическими методами и методами экземпляра .
Из сообщения:
Методы экземпляра являются методами экземпляра, потому что они полагаются на государство конкретного экземпляра объекта. Методы экземпляра привязаны к конкретный экземпляр, потому что поведение, которое вызывает метод зависит от состояния этого конкретного экземпляра.
Когда вы объявляете метод как статический, вы определяете этот метод как метод класса. Метод класса применяется к классу, а не к любому конкретный экземпляр. Поведение, вызванное методом класса, делает не полагаться на состояние конкретного экземпляра. Фактически, статический метод не может полагаться на состояние экземпляра, поскольку статические методы не имеют доступ к этой ссылке. Вместо этого поведение метода класса либо зависит от состояния, которое все объекты разделяют на уровне класса, или не зависит от какого-либо состояния вообще.
Если метод полагается на состояние экземпляра объекта, он должен быть методы экземпляра. Если метод является общим для всех экземпляров класс и не зависит от состояния объекта, он должен быть статическим метод. Чаще всего используются методы экземпляра. Однако статический методы очень полезны для служебных и фабричных классов среди многих другое использование.