Поскольку массивы могут содержать смешанные значения, это невозможно.
Для этой цели вам необходимо использовать объекты / класс.
Вы можете создать класс, который будет управлять собственным массивом списка (частный / защищенный атрибут) и запретить добавлять другие значения в качестве рабочий стол для этой проблемы, если это действительно необходимо.
Однако ни один ответственный программист никогда не сломает намеченный шаблон, особенно если вы его прокомментируете правильно.
Экзапланирование:
Например, вы можете создать любой массив:
$myArray = array();
и добавить number:
$myArray[] = 1;
a строка:
$myArray[] = "abc123";
и объект
$myArray[] = new MyClass("some parameter", "and one more");
Также не забывайте, что вы можете иметь простой массив, многомерный штабелированный массив, а также ассоциативные массивы, которые также могут иметь смешанные шаблоны.
Его довольно трудно, пока невозможно найти парсер / нотацию, чтобы все версии работали с выражением, которое заставляет формат для массив, я думаю.
Было бы здорово с одной стороны, но с другой стороны медали вы потеряете некоторую способность смешать данные в массиве, которые могут иметь решающее значение для большого количества существующего кода и гибкости PHP может предложить.
Из-за смешанного контента, функции которого мы не хотим пропустить в PHP 7, невозможно набрать точное совпадение массива, как вы можете что-то вставить.
Если методы статические, да.
Но вы не сможете получить доступ к нестатичным членам.
У меня есть класс с несколькими методами, и среди этих методов нет конструктора.
Если вы не определите конструктор явным образом, вы получите конструктор по умолчанию, предоставленный компилятором. Так что, если эти методы не являются статичными, попробуйте это:
NameOfClass x = new NameOfClass();
x.doMethod(x1,x2,...,xn);
Поскольку qre является статическим методом и не имеет доступа к экземплярам включающего класса, вам сначала нужно создать экземпляр, а затем получить к нему доступ. Например:
public class Foo {
private int bar;
public static void qre() {
Foo foo = new Foo();
foo.bar = 5;
System.out.println("next bar: " + (++5));
}
}
Это называется статическими переменными и статическими методами . Просто попробуйте и убедитесь, что он компилируется.
Как многие отмечали: это возможно только в том случае, если метод является статическим. Может быть, уместно немного предыстории ООП: метод всегда должен принадлежать классу. Так в чем же смысл вызова метода без экземпляра класса? В идеальном мире объектно-ориентированного программирования не должно быть никаких причин для этого. Во многих случаях использования, связанных со статическими методами, говорится о присвоении вашему классу какой-либо идентичности. Хотя это совершенно разумно в мире программирования, это не очень убедительно, когда дело доходит до объектно-ориентированного дизайна.
Поскольку мы программируем в несовершенном мире, часто есть вариант использования «бесплатной функции» (например, способ реализации sort () в Java или C ++). Поскольку в Java нет прямой поддержки свободных функций, классы с использованием только статических «методов» для выражения этой семантики с дополнительным преимуществом оболочки класса, обеспечивающей «пространство имен». Что вы думаете об этом обходном пути, и если вы видите его как недостаток в языковом дизайне, это вопрос IMO.
На большинстве языков это возможно, только если метод статичен. А статические методы могут изменять только статические переменные.
У меня есть класс с несколькими методами , и среди этих методов нет конструктора.
Вы имеете в виду, что у вас есть что-то вроде:
public class X
{
public void foo()
{
}
}
или вы имеете в виду, что у вас есть что-то вроде:
public class X
{
private X()
{
}
public void foo()
{
}
}
Если это первый способ, то да, есть конструктор, и он будет выглядеть так:
public X()
{
super();
}
если это второй способ, то, вероятно, существует такой метод, как:
public static X createInstance()
{
return (new X());
}
Если вы действительно имеете в виду, могут ли классы иметь методы, которые делают что-то без создания экземпляра, тогда да, вы можете, просто сделайте все методы и переменные статическими (обычно это не очень хорошая идея, но для некоторых вещей она идеальна).
При правильной инкапсуляции вы не должны «видеть», что происходит при создании экземпляра. Полагаться на отсутствие конструктора в классе нарушает эту форму. При разработке класса я имел в виду добавить формальную инициализацию состояния в конструктор позже. Ваш «контракт» с классом заключается только в том, что вы можете использовать методы в том виде, в каком они разработаны.
Если вы хотите использовать функциональные возможности этого метода без накладных расходов класса, возможно, вам лучше включить этот метод в свой существующий «клиентский» класс (конечно, это просто кодирование «копировать и вставлять» и считается антипаттерн разработки программного обеспечения.
Метод класса работает в контексте экземпляра; он имеет доступ к переменным-членам экземпляра. Вы понимаете это, потому что спрашиваете, что произойдет, если метод получит доступ к одной из этих переменных.
Вы можете понять, почему это не работает, задав себе вопрос: «Где данные?» Если у вас нет экземпляра, где находится переменная экземпляра? Где данные? И ответ в том, что ему нет места, и поэтому он не работает.
Разница между статической функцией и статическими переменными-членами заключается в том, что вы можете ответить на вопрос о местонахождении данных. Статические переменные доступны независимо от того, есть конкретный экземпляр или нет. Выбор конкретного экземпляра и конкретного класса - это решение, которое вы должны принять с учетом того, что вы действительно хотите делать.