Является ли функционал, написанный исключительно на одних статических свойствах и методах (речь, разумеется, про PHP) - кодом, написанным на ООП? Объектов же не будет. Кто как считает?
Если только статические - нет, не ООП. Именно потому что нет объектов. А классы в этом случае просто в роли модулей. Работал с таким движком, даже несмотря на то, что в целом он не плох, не понравилось.
Хотя, конечно, в php умудрились впихнуть даже статический полиморфизм Пример - метод ActiveRecord::tableName() из Yii2
Это зависит от религии. Например, статику можно рассматривать как глобальный объект (разницы нет). А можно, как библиотеку функций со своей областью видимости.
Сформулирую так: объект это экземпляр данных, к которому по его природе, применимы определённые действия. С помощью классов мы указываем какие именно действия применимы. Когда у нас есть только "полностью статические" классы, у нас нет типизованных экземпляров этих данных. Мы вынуждены оперировать либо массивами, либо обезличенными объектами типа stdClass. Код с массивами может быть выполняется немного быстрее, но он точно менее предсказуем и труднее тестируется. А значит дороже в эксплуатации. В последние годы интересы пэхапэшников заметно сдвигаются от "быстрого" к "удобному".
N.B. В Ларавеле есть Facades. Но там статический вызов используется только для быстрой добычи объекта, а дальше работают не-статические методы.
Формально, статика - ООП. Этож ооп-термин, часть классической ооп-механики и тд. Но если пишешь только на статике, а в резюме указываешь пункт "Владение ООП", то, по факту, лукавишь и сильно.
Самописный, не публичный, был заказ на ряд доработок. Достаточно профессионально написанный, но на статике. Как раз и не понравилось, что из базы возвращаются ассоциативные массивы, а не объекты бизнес-логики. Не от чего унаследоваться. Ну правда, пока я был в границах уже существующего функционала, я писал так, как там уже было написано, когда стал дописывать совсем новый, я нашёл, где вставить нормальные классы.
Прям, холивар намечается на пустом месте. Автор спрашивал про проект целиком на статике, а не то как правильно ее применять. @Walk, если в классах используются только статические методы (и свойства), то максимум, что можно реализовать из ООП в таком проекте - это наследование. А ООП этим не ограничивается.
При том, что в языках вроде C++, класс переменной есть её тип, в PHP всё еще это разные вещи. Хотя хинтинг частично смазывает эти понятия.
Самое интересное что да как таковое оно отстутствует. Но при этом можно захерачить наследование. Что в обычных использованиях функций такое было бы не возможно. --- Добавлено --- А наследование у нас пошло от ООП. Ну это так пофилософствовать --- Добавлено --- я имею ввиду доступность свойств типа static и self --- Добавлено --- и parent доступность статических функций ) --- Добавлено --- я бы сказал это тянет на уже реализованный объект... Который является единичным экземпляром самого себя. --- Добавлено --- это как объект в js который мы можем создать и не создавая экземпляра напрямую к нему обращаться.
Объект это экземпляр класса, а не самого себя. КЛАСС НЕ ОБЪЕКТ, не надо блин путать эти слова. --- Добавлено --- и не надо сравнивать с js. там всё очень запущено с их прототипами. нет никакой аналогии.
А я и не говорил этого. Я всего лишь сказал своё мнение на что это похоже по принципу своей работы. Я и не утверждаю что это ООП. Потому что ООП изначально задумывался как чертёж (класс) и станки(создание экземпляра класса т.есть Объект) реализующие детали(результат) по этому чертежу. --- Добавлено --- @artoodetoo я же написал : --- Добавлено --- js создадим объект на js. Там даже нет понятия класса. Зато там есть понятие объект. К которому можно обратится на прямую, а можно создать его экземпляр. через new что будет уже новым объектом с теми же условиями что и предыдущий. Наследования на прототипах я не трогал я лишь так привёл аналогию результат работы. Говорю же пофилософствовать. --- Добавлено --- Но при этом всём создавая статические методы и св-ва мы имеем права обращаться к ним напрямую не создавая экземпляра класса (Объекта). Но мы можем иметь наследование от предыдущего класса. Всё чётко, так именно она и работает. А на что это похоже по тому как выглядит сея работа статики?
аминь. PHP: <?php function fn (int $var) {} function fn2 (object $var) {} function fn3 (CLassName $var) {}
Да ты что? Так, завязывай раасуждать о том, чего не знаешь. new в JS работает не так. Ни от какого объекта он экземпляр не создает. Через new вызывается конструктор конкретного класса, возвращающий некий объект.
@Fell-x27 я думал он ссылку на объект создаёт как в пыхе, если нет то сори не знал как он под коркой работает. Про классы соглашусь не знал и стало аж инетресно...
Я хз, о чем ты думал, но это вот: жесть. "Под коркой" даже на старом стандарте, где ключевого слова Class нет, все равно были конструкторы. Конструктором, в данном случае является любая функция. Вообще любая. При обращении к этой функции через new, яваскрипт даст ей отработать, а потом вернет ее this как экземпляр ее "класса". Либо, если функция сама явно возвращает какой-то объект, JS вернет его, а не this функции. P.S. Когда что-то утверждаешь или кого-то учишь, желательно знать, о чем говоришь, а не думать, что знаешь. Это опасная ловушка.