В PHP ООП нужен, когда нескольким функциям требуется обращаться к общим переменным.
Без ООП пришлось бы писать код вида:
<?php
namespace something1 {
function set($value) {
$GLOBALS['something1']['someVariable'] = $value;
}
function get() {
return $GLOBALS['something1']['someVariable'];
}
}
namespace something2 {
function set($value) {
$GLOBALS['something2']['someVariable'] = $value;
}
function get() {
return $GLOBALS['something2']['someVariable'];
}
}
namespace {
\something1\set(1);
\something2\set(2);
print \something1\get();
print \something2\get();
}
и:
<?php
namespace something {
function set($instanceName, $value) {
$GLOBALS[$instanceName]['someVariable'] = $value;
}
function get($instanceName) {
return $GLOBALS[$instanceName]['someVariable'];
}
}
namespace {
\something\set('instance1', 1);
\something\set('instance2', 2);
print \something\get('instance1');
print \something\get('instance2');
}
С ООП можно написать:
<?php
class Something1 {
private $someVariable;
function set($value) {
$this->someVariable = $value;
}
function get() {
return $this->someVariable;
}
}
class Something2 {
private $someVariable;
function set($value) {
$this->someVariable = $value;
}
function get() {
return $this->someVariable;
}
}
$something1 = new Something1();
$something1->set(1);
$something2 = new Something2();
$something2->set(2);
print $something1->get();
print $something2->get();
и:
<?php
class Something {
private $someVariable;
function set($value) {
$this->someVariable = $value;
}
function get() {
return $this->someVariable;
}
}
$something1 = new Something();
$something1->set(1);
$something2 = new Something();
$something2->set(2);
print $something1->get();
print $something2->get();
Если брать web приложение на php, задача которого состоит в том, чтобы сгенерировать html код (который будет отправлен браузеру) и предоставить возможность разделения приложения на модули, то ООП в качестве основы такого приложения может быть излишен, т.к. все модули будут выполнять лишь одно действие (возвращать html код) и им не потребуется сохнанять состояние между вызовами, т.к. результат работы модуля не будет больше изменяться во время вызова web приложения (модуль сгенерирует html и отправит его браузеру, а в браузере, где в javascript применяется ООП, этот html код уже будет изменяться во время работы).
Без ООП серверная часть web приложения может выглядеть так:
<?php
namespace modules {
function layout($title, $contentHtml, $footerHtml) {
return '<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>' . htmlspecialchars($title) .'</title>
</head>
<body>
<div class="content">
' . $contentHtml . '
</div>
<div class="footer">
' . $footerHtml . '
</div>
</body>
</html>
';
}
function contacts() {
return 'Адрес: ..., телефон: ...';
}
function copyright() {
return '© Моя фирма';
}
}
namespace {
if (strtok($_SERVER['REQUEST_URI'], '?') === '/contacts') {
print \modules\layout('Контакты', \modules\contacts(), \modules\copyright());
}
}
А с ООП так (как можно заметить, модули реализовалы в виде классов, которые содержат только 1 метод, т.е. класс здесь излишен):
<?php
namespace modules {
class Layout {
public $title;
public $contentHtml;
public $footerHtml;
public function execute() {
return '<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>' . htmlspecialchars($this->title) .'</title>
</head>
<body>
<div class="content">
' . $this->contentHtml . '
</div>
<div class="footer">
' . $this->footerHtml . '
</div>
</body>
</html>
';
}
}
class Contacts {
public function execute() {
return 'Адрес: ..., телефон: ...';
}
}
class Copyright {
public function execute() {
return '© Моя фирма';
}
}
}
namespace {
if (strtok($_SERVER['REQUEST_URI'], '?') === '/contacts') {
$layout = new \modules\Layout();
$layout->title = 'Контакты';
$layout->contentHtml = (new \modules\Contacts())->execute();
$layout->footerHtml = (new \modules\Copyright())->execute();
print $layout->execute();
}
}
Но если бы PHP использовался для разработки не серверного, а клиентского приложения, где сгенерированная визуальная часть сохранялась бы в оперативной памяти долгое время и пользовательские действия изменяли бы её, то использование ООП может быть удобным. Но опять же, ООП - это просто способ организации кода, в основе которого лежат всё те же подпрограммы (методы) и этот способ организации не всем может понравиться.