Можете ли вы иметь глобальные методы в PHP?
В таких языках, как Ruby/Javascript, вы можете применять объектные операторы к чему угодно. То есть,
var string = "Pancakes";
alert(string.length);
// 8
Как это называется, когда все в объекте? Есть ли что-то, что может заставить PHP вести себя таким образом, вместо того, чтобы взламывать что-то вместе? Это то, что в настоящее время запрашивается в сообществе PHP?
Способность делать echo (new String("Hello"))->length()
было бы хорошо, или даже "Hello"->length();
Я бы даже согласился на:
$var = "Hello";
echo $var->length;
4 ответа
Это называется объектно-ориентированным программированием. PHP поддерживает ООП, но большая часть языка реализована в виде плоских функций, которые принимают аргументы.
Вам нужно определить свои собственные объекты, если вы хотите работать с ними, в противном случае вы застряли с необходимостью использовать такие функции, как strlen()
на встроенных типах, таких как String
,
Java-программисты используют термин autoboxing для возможности вызова методов примитивных значений. В JavaScript также есть эта функция, и она работает, создавая временные объекты-оболочки. Я не знаю о Руби.
В PHP это невозможно. new String("Hello")->length()
тоже не возможно, в основном потому что нет String
класс с такими методами, как length
, Вы можете создать свой собственный, но стоит ли это того? Кроме того, вы можете быть заинтересованы в этом взломать.
Объектная ориентация (ОО) - это то, что было добавлено в PHP "после факта". До реализации ОО все делалось с использованием функций (как и многих других языков программирования, подобных С).
Когда дело доходит до PHP, строки, целые числа, логические значения и т. Д. Являются просто данными. Они примитивные типы и ничего не могут сделать; это просто именованные значения, хранящиеся в памяти. Вот почему вам нужно использовать функции, такие как strlen($str)
, Функция действует на значение.
В таких языках, как Ruby и Javascript, большинство типов данных, таких как строки, фактически являются объектами (или, в некоторых случаях, объектами типа своего рода). Они содержат различные свойства, такие как .length
и такие методы, как .indexOf()
, Другое слово для таких типов данных - составной тип (они состоят из более чем одной вещи).
Итак, в PHP вы можете сказать, что это нормально писать strlen($str)
выяснить, какова длина строки; аналогично, в Javascript или Ruby нормально писать str.length
,
Можно написать String
класс в PHP, но это не относится к делу. Это все равно что учиться считать до десяти, но настаивать на том, чтобы это было сделано в base-7. Это не очень практично, и люди будут думать, что вы сошли с ума.
Они называют это объектно-ориентированным программированием. Более новые версии PHP - OO. Вы можете создавать классы с методами, чтобы выполнить то, на что вы ссылаетесь.