Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/20: Рейтинг темы: голосов - 20, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 17

Чем именно отличается ООП от процедурного стиля?

30.11.2012, 18:32. Показов 3963. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я еще только начал изучать PHP и вот возник вопрос насчет ООП.
Что же такого хорошего дает class? ведь без него так-же можно все написать.
Если не так приведите пример пожалуйста, чтобы было понятно.
Очень хотелось бы понять чем отличаются эти class, единственное что я понял, это то что этими классами полезно объединять некоторые функции для удобства.
Но ведь есть какие-то еще плюсы?

Сорри, если это очень тупой вопрос ...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.11.2012, 18:32
Ответы с готовыми решениями:

Переменная и из процедурного стиля в ООП класса
1.php <?php require_once("dbconnect.php"); require_once("login.php"); class groupclass { function get_group() { ...

Перевод гостевой книги с процедурного стиля на ООП
Всем привет! Есть у меня простенькая гостевая книга (файл index.php). На практике сказали избавиться от процедурного метода и поработать с...

Чем отличается функция старого стиля от нового?
Чем отличается функции старого стиля от нового? И если можно пример

13
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
30.11.2012, 21:45
Я создавал подобную тему: В чём плюс у ООП?
Посмотрите, может в ней найдёте ответ
1
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 17
01.12.2012, 11:46  [ТС]
Ну в теме я и нашел ответ на то что я уже знал, это в большинстве случаев он просто упрощает код.
Нашел так-же его плюсы, спасибо вам за ссылку на тему.

Еще небольшой вопросик, $this-> в class заменяет $, функциям или переменным в классе? (объявленные именно в классе)
0
 Аватар для alpex
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762
01.12.2012, 12:28
вот например вы создаете обьект, у одного класса может быть много обьектов, так вот $this это указатель на обьект, только внутри класса

Добавлено через 6 минут
вот примерчик
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class A
{
    private $var;
    function __construct($name)
    {
        $this->var = 'Hello, ' . $name . ' !';
    }
    function foo()
    {
        $this->bar();
    }
    function bar()
    {
        echo $this->var, '<br />';
    }
}
$o1 = new A('Bob');
$o2 = new A('John');
$o1->foo();
$o1->bar();
$o2->foo();
$o2->bar();
Добавлено через 4 минуты
внутри метода foo вызывается метод bar, внутри класса это делается $this->bar(), снаружи $o1->bar(), в итоге результат один и тот же
но для второго обьекта вы уже вызываете его $o2->bar() , хотя внутри класса он вызывается так же как и для первого обьекта, т.е указатель this это указатель на кокретный екземпляр класса(обьект) в контексте которого происходит обрашение к классу
1
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 17
01.12.2012, 13:26  [ТС]
alpex, Спасибо, все понял.

Просто в предыдущей ссылке написан код и у меня возник вопросик еще:

Код из ссылка:
PHP
1
2
3
4
5
6
7
8
9
10
public function connect()
        {
            $dbconnect = mysql_connect($this->location, $this->dbuser, $this->dbpass);
            mysql_select_db($this->dbname, $dbconnect);
            
            if (!$dbconnect)
            {
                echo "No connect!";
            }
        }
Ведь так тоже будет работать?

PHP
1
2
3
4
5
6
7
8
9
10
public function connect()
        {
            $this->dbconnect = mysql_connect($this->location, $this->dbuser, $this->dbpass);
            mysql_select_db($this->dbname, $this->dbconnect);
            
            if (!$this->dbconnect)
            {
                echo "No connect!";
            }
        }
или это уже не правильно?
0
 Аватар для alpex
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762
01.12.2012, 13:32
да так более правильно, только обычно при подключении к БД ресурс укладывают в статическое свойство, и потом при обращении возвращается это статическое свойство, это дает возможность подключаться к базе только один раз, ну хотя и так тоже можно
1
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 17
01.12.2012, 13:37  [ТС]
Спасибо, для себя все что хотел узнал.

Добавлено через 1 минуту
Ах да еще хотел узнать.

Зачем расширять класс? разве в одном все сделать нельзя? или тоже для удобства?
0
 Аватар для alpex
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762
01.12.2012, 14:10
вот как то так, это типичный синглтон
Здесь нельзя создать обьект напрямую, т.к конструктор приватный, получение обьекта происходит через статический метод
PHP
1
$obj = DB_Connect::init()
в нем проверяется значение в статическом свойстве и если там null то создается обьект, и помещается в статическую переменную? а в конструкторе производится подключение к базе и дескриптор этого соединеия помещается в приватную переменную переменную
и теперь из любого места можно получить этот дескриптор, при том он всегда будет создан только один раз
PHP
1
2
3
$obj->get_connect();
или так
$db = DB_Connect::init()->get_connect()
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class DB_Connect
{
    private static $instance = null;
    
    private $dbconnect = null;
    private $location = 'localhost';
    private $dbuser = 'root';
    private $dbpass = '';
    private $dbname = 'basename';
    
    public static function init()
    {
        if (self::$instance === NULL)
            self::$instance = new self();
        
        return self::$instance;
    }
    
    public function get_connect()
    {
        return $this->dbconnect;
    }
    
    private function __construct()
    {
        $this->connect();
    }
    
    private function connect()
    {
        if (!$this->dbconnect = mysql_connect($this->location, $this->dbuser, $this->dbpass))
            throw new Exception('Error connect');
        if (!mysql_select_db($this->dbname, $this->dbconnect))
            throw new Exception('Error select database');
    }
}


Добавлено через 2 минуты
ну как зачем расширять, это дает огромные возможности, вы наследуете свойства и методы базового класса, и можете их использовать в классах наследниках, что дает возможность не переписывать их заново в каждом классе

Добавлено через 6 минут
здесь на форуме есть отличный гайд по ООП, вот почитайте, там и про наследование хорошо расписано и вообще
1
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 17
01.12.2012, 14:11  [ТС]
alpex, Все понял, кроме self ;(
0
 Аватар для alpex
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762
01.12.2012, 14:13
self это указатель на класс или на свойства/методы класса
статические свойства и методы принадлежат классу а не обьекту
1
0 / 0 / 0
Регистрация: 30.11.2012
Сообщений: 17
01.12.2012, 14:24  [ТС]
alpex, небольшое предположение self когда статическое свойство или метод, а по другому this?
Просто в том учебнике про self так-же показано. Это не так?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
01.12.2012, 15:20
self - для обращения к элементам класса, $this - для обращения к элементам объекта
1
 Аватар для foxxp
83 / 21 / 1
Регистрация: 17.11.2012
Сообщений: 351
03.12.2012, 20:44
единственное что я понял, это то что этими классами полезно объединять некоторые функции для удобства.
именно!
0
87 / 87 / 8
Регистрация: 02.09.2012
Сообщений: 510
05.12.2012, 18:59
Цитата Сообщение от manticore Посмотреть сообщение
единственное что я понял, это то что этими классами полезно объединять некоторые функции для удобства.
Цитата Сообщение от foxxp Посмотреть сообщение
именно!
если только для этого, то это никакое не ООП
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.12.2012, 18:59
Помогаю со студенческими работами здесь

Чем отличается логическое программирование от ООП?
Прошу прощения за дилетантский вопрос, я не знаком с логическим программированием, только лишь присматриваюсь к нему, поэтому, то что я...

Скажите, чем функция от функционального вызова отличается с точки зрения прерываний именно?
Скажи, чем функция от функционального вызова отличается? с точки зрения прерываний именно. Добавлено через 5 минут Кста можно и без...

ООП: почему переменные в классе обозначают именно так?
Подскажите почему переменые в классе обозначают так class MyClass { var $a; public var $b; } Почему пишеться var...

Не могу разобраться, в ООП с MS Office (word, excel). Именно для VB
Всем привет) Я ток начал разбираться в Visual Basic. До этого, активно юзал VBA. Создавал, формачи, кнопачки всякие прикольные штуки...

Чем отличается if от (?:)
Здравствуйте. Почитываю С++, сам программирую в Делфи. Вот немного запутался. В делфи есть условный оператор if, тогда как в С++ есть такой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru