Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 16.07.2013
Сообщений: 24

Почему солнце круглое, а небо зеленое. Почему ооп такое странное?

05.10.2015, 18:10. Показов 1220. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Учил я пхп. Самоучитель PHP 5/6 и сайт метанит. И все было хорошо. Чтобы закрепить основы решил написать что-то такое:
1. Сохранить БД в тхт-файлы;
2. Из тхт-файлов создать БД.
Начал писать что-то такое
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
class Storage
{
        private $conn;
        function __construct()
        {
            require_once 'cfg.php';
            $this->conn = mysqli_connect($dblocation, $dbuser, $dbpassword, $dbname)
                            or die (mysqli_error($this->conn));
        }
        function __destruct()
        {
            mysqli_close($this->conn);
        }
        
        function get_storage($tables)
        {
            foreach ($tables as $key=>$table)
            {
                $this->select_from_table($table);
            }
        }
        
        function get_tables()
        {
            $tables = array();
            $res = mysqli_query($this->conn,'SHOW TABLES');
            while($row = mysqli_fetch_array($res))
            {
                $tables[] = $row[0];
            }   
        return $tables;
        }
        
        function fill_db()
        {
        
        }
        
        function insert_into_table()
        {
        
        }
        
        private function select_from_table($table, $dir='storage')
        {
            if(!is_dir($dir))mkdir($dir);
            $fd = fopen("$dir/$table.txt", 'w');
            $res = mysqli_query($this->conn,"SELECT * FROM $table");
            $row = mysqli_field_count($this->conn);
            while($cRow = mysqli_fetch_array($res))
            {
                for($i=0; $i<$row;$i++)
                {
                    fwrite($fd, $cRow[$i].' / ');
                }
                fwrite($fd, PHP_EOL);
            }
            fclose($fd);
            clearstatcache();
        }
        
        private function create_db()
        {
            
        }
        
        private function create_table()
        {
            
        }
}

Но тут на глаза мне попали примеры из оф-документации по mysqli_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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
class Storage
{
        private $mysql;
        function __construct()
        {
            require_once 'cfg.php';
            $this->mysql = new mysqli($dblocation, $dbuser, $dbpassword, $dbname);
            if ($mysqli->connect_errno) 
            {
                printf($mysqli->connect_error);
                exit();
            }
        }
        function __destruct()
        {
            $this->mysql->close();
        }
        
        function get_storage($tables)
        {
            foreach ($tables as $key=>$table)
            {
                $this->select_from_table($table);
            }
        }
        
        function get_tables()
        {
            $tables = array();
            $result = $this->mysql->query('SHOW TABLES');
            while($row = $result->fetch_array())
            {
                $tables[] = $row[0];
            }   
        return $tables;
        }
        
        function fill_db()
        {
        
        }
        
        function insert_into_table()
        {
        
        }
        
        private function select_from_table($table, $dir='storage')
        {
            if(!is_dir($dir))mkdir($dir);
            $fd = fopen("$dir/$table.txt", 'w');
            $result = $this->mysql->query("SELECT * FROM $table");
            $row = $this->mysql->field_count;
            while($cRow = $result->fetch_array())
            {
                for($i=0; $i<$row;$i++)
                {
                    fwrite($fd, $cRow[$i].' / ');
                }
                fwrite($fd, PHP_EOL);
            }
            fclose($fd);
            clearstatcache();
        }
        
        private function create_db()
        {
            
        }
        
        private function create_table()
        {
            
        }
}

И вот здесь у меня возик вопрос: база - обьект, результат запроса - обьект, а файлы что?
Почему нельзя вызвать методы записи/чтения из файла?
т.е.
PHP
1
2
3
$file = new file("$dir/$file.txt");
$file->fopen('w');
$file->fwrite('Hello');
Собственно вопрос не cтолько почему нельзя, сколько "а как правильно писать на php"?
Может кто знает актуальные книги/сайты где можно найти примеры правильного/"современного" php-коддинга?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.10.2015, 18:10
Ответы с готовыми решениями:

Графика. Нарисовать небо, движущиеся облака и солнце; если облако закрывает солнце, идет дождь
Нарисовать небо и движущиеся облака и солнце. Если облако закрывает солнце, идет дождь. Движение запускается и останавливается по щелчку...

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

у Nvidia все зеленое или почему сломалась видеокарта
Здравствуйте! Кто может подсказать, можно ли починить это? ( скриншот прилагается) Пробовал другой монитор - то же самое. Носили в...

2
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
05.10.2015, 19:24
Цитата Сообщение от user7 Посмотреть сообщение
Почему нельзя вызвать методы записи/чтения из файла?
потому что нету таких классов, очевидно же?

Для записи в файл достаточно одной функции - file_put_contents
Для чтения из файла достаточно одной функции - file_get_contents

Зачем тут классы? А если так хочется, то напишите свой - кто мешает?
Цитата Сообщение от user7 Посмотреть сообщение
exit();
Цитата Сообщение от user7 Посмотреть сообщение
or die (mysqli_error($this->conn));
А Вы понимаете что эти строчки прекращают работу ВСЕГО скрипта? То есть если у Вас подключение к базе не удалось, то сайт тупо отобразит ошибку и на этом все.
1
775 / 444 / 93
Регистрация: 24.10.2012
Сообщений: 3,240
Записей в блоге: 5
06.10.2015, 10:30
Цитата Сообщение от user7
база - обьект, результат запроса - обьект, а файлы что?
Файлы это просто функции php. В php есть около 90 ф-й для работы с файловой системой

http://php.net/manual/ru/book.filesystem.php

Есть набор функций для работы с низкоуровневыми сетевыми подключениями, со строками, с числами, с изображениями. Поэтому можно сказать что php это процедурный язык.

Есть встроенные классы в php.

http://php.net/manual/ru/reserved.classes.php

http://php.net/manual/ru/spl.interfaces.php

http://php.net/manual/ru/reserved.interfaces.php

Это те же функции только оформлены в стиле объектно ориентированного программирования. Поэтому можно сказать что php это объектно ориентированный язык.

Но, так как в php есть и простые ф-и вроде fopen, substr, strlen и встроенные объекты то можно сказать что php это гибридный язык программирования, что он процедурно-объектно-ориентированный язык программирования. В php есть просто функции и встроенные объекты.

https://ru.wikipedia.org/wiki/PHP
https://ru.wikipedia.org/wiki/... ммирования
https://ru.wikipedia.org/wiki/... ммирования
https://ru.wikipedia.org/wiki/Парадигма

Цитата Сообщение от user7
Почему нельзя вызвать методы записи/чтения из файла?
Потому что нет таких методов, для этого есть простые функции. Так создан язык PHP.

То есть если Вам надо обращаться к базе данных создаете объект и работаете с базой данных встроенными методами этого класса mysqli. А если Вам надо создать файл просто прописываете ф-ю fopen без создания объектов классов.

Если Вы хотите что бы все было в обертке объектно ориентированного программирования, если вам так нравиться

Цитата Сообщение от user7
где можно найти примеры правильного/"современного" php-коддинга?
можно создать свой пользовательский класс FileClass с набором методов для создания/удаления файлов, записи либо получения данных из файлов, создания/удаления/копирования/перемещения каталогов, распаковки архивов. И использовать этот класс совместно с классом mysqli.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.10.2015, 10:30
Помогаю со студенческими работами здесь

Почему возможно задать массив с размером -1 (почему такое вообще компилируется)?
Всем привет. Долгое время не писал на плюсах, решил пройтись по основам, вспомнить. По непонятным для меня причинам этот код...

Почему кондиционер не любит солнце?
Мне тут на днях мастера сказали, когда ставили внутренний блок дома у матери, что кондиционеры не любят солнце и что стоит выбирать место...

Почему Земля не падает на солнце?
Здравствуйте у меня такой вопрос почему Земля не падает на солнце, знаю только одно что благодаря двум противоположенным силам, силе...

Почему Земля не падает на солнце?
Здравствуйте у меня такой вопрос почему Земля не падает на солнце, знаю только одно что благодаря двум противоположенным силам, силе...

Timage: нарисовать дом, дерево, небо, солнце
Нарисовать дом, дерево, небо, солнце с помощью компонента Image


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru