Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: основы ООП

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
Ezi
Отправлено: 14 Февраля, 2012 - 21:51:41
Post Id



Частый гость


Покинул форум
Сообщений всего: 242
Дата рег-ции: Дек. 2010  


Помог: 2 раз(а)




Вот изучал основы ООП, по необходимости сделал класс, опытный народ, как вам исполнение кода и на какие ошибки стоит обратить внимание Улыбка

схема файлов
/config/config.php
/lib/class.php
main.php


Листинги:

config.php
Спойлер (Отобразить)


class.php
Спойлер (Отобразить)


main.php
Спойлер (Отобразить)


-----
Хочешь жить - умей вертеться
 
 Top
Panoptik
Отправлено: 14 Февраля, 2012 - 22:34:49
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




лично мне не нравится конфиг. я бы его преобразовал либо в класс, либо в функцию, возвращающую большой массив. - тогда можно конфигурировать бесконечное количество параметров. и не создаются глобальные переменные. ну или использовать неймспейсы. хотя я их и сам пока не использовал, но во всяком случае я против глобальных переменных в любом проявлении


-----
Just do it
 
 Top
Okula
Отправлено: 14 Февраля, 2012 - 22:41:37
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




А что, никто не заметил насчёт метода __go() а конкретно его имени.
"PHP оставляет за собой право все методы, начинающиеся с __, считать "магическими". Не рекомендуется использовать имена методов с __ в PHP, если вы не желаете использовать соответствующий "магический" функционал."
 
 Top
Ezi
Отправлено: 14 Февраля, 2012 - 22:56:35
Post Id



Частый гость


Покинул форум
Сообщений всего: 242
Дата рег-ции: Дек. 2010  


Помог: 2 раз(а)





Okula,
Okula пишет:
"PHP оставляет за собой право все методы, начинающиеся с __, считать "магическими". Не рекомендуется использовать имена методов с __ в PHP, если вы не желаете использовать соответствующий "магический" функционал."
Ха-ха

Это уличная магия(c)


А если по теме, то я последовал совету одного юзера на форуме, обзывать приватные методы с начала "__".

Panoptik, предложи хотя бы минимальную конструкцию конфига в качестве класса или функции. Данное решение было выбрано с целью простоты занесения настроек конеччным юзером.



p.s. Код в целом не быдлокод?


-----
Хочешь жить - умей вертеться
 
 Top
Okula
Отправлено: 14 Февраля, 2012 - 23:20:19
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




Как таковой объектной модели тут нет. Просто обёртка статичных функций.
 
 Top
Panoptik
Отправлено: 14 Февраля, 2012 - 23:45:33
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




не буду умничать. вот пример k0stix'a с rutracker.org в его уроках был предложен такой подход. содается класс конфиг - а его уже наследует класс базы данных, а делее по иерархии
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. //      require_once "debug.php" ;
  3.  
  4.         class Config /* extends Debug */ {
  5.                 function __construct() { // конструктор загружает в $APP_PATH путь к проекту
  6.                         $this->APP_PATH = dirname(dirname(__FILE__)) ;
  7.                 }
  8.                
  9.                 var $APP_PATH ; // переменная предназначена для хранения абсолютного пути к проекту
  10.                
  11.                 var $BASE_URL   = "test1.ru" ; // базовый УРЛ сайта
  12.  
  13.                 var $DB_HOST    = "localhost" ; // имя хоста
  14.                 var $DB_USER    = "root" ;
  15.                 var $DB_PASS    = "" ;
  16.                 var $DB_NAME    = "panoptik" ;
  17.        
  18.         var $SITE_ADM   = "admin" ;
  19.         var $ADM_PASS   = "root" ;
  20.        
  21.         }
  22.        
  23.         $config = new Config() ; // создаем объект класса и запускаем конструктор
  24.        
  25. //      $app_path = new AppPath() ;
  26. ?>
  27.  

вот конфиг Eugen'a взят отсюда http://forum.php.su/topic.php?fo...=62&topic=98
это идея зенд-фреймворка хранить конфиг данные в текстовых(ини) файлах
CODE (text):
скопировать код в буфер обмена
  1. [main]
  2. dbtype  = Sqlite
  3. dbname  = /var/www/data/simplemvc/Db/appdb
  4. dbhost  = 127.0.0.1
  5. dbuser  = NOUSER
  6. dbpassword  = NOPASSWORD
  7. dbport  = NOPORT
  8.  
  9. web_root    = http://simplemvc.dev
  10.  

ну и 3-й пример я возьму с фреймворка, которым сам щас понемногу начинаю пользоваться - yii
вот тут как раз используется return с безразмерным массивом настроек и параметров
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. // uncomment the following to define a path alias
  4. // Yii::setPathOfAlias('local','path/to/local-folder');
  5.  
  6. // This is the main Web application configuration. Any writable
  7. // CWebApplication properties can be configured here.
  8. return array(
  9.         'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
  10.         'name'=>'My Web Application',
  11.  
  12.         // preloading 'log' component
  13.         'preload'=>array('log'),
  14.  
  15.         // autoloading model and component classes
  16.         'import'=>array(
  17.                 'application.models.*',
  18.                 'application.components.*',
  19.         ),
  20.  
  21.         'modules'=>array(
  22.                 // uncomment the following to enable the Gii tool
  23.                 /*
  24.                 'gii'=>array(
  25.                         'class'=>'system.gii.GiiModule',
  26.                         'password'=>'Enter Your Password Here',
  27.                         // If removed, Gii defaults to localhost only. Edit carefully to taste.
  28.                         'ipFilters'=>array('127.0.0.1','::1'),
  29.                 ),
  30.                 */
  31.         ),
  32.  
  33.         // application components
  34.         'components'=>array(
  35.                 'user'=>array(
  36.                         // enable cookie-based authentication
  37.                         'allowAutoLogin'=>true,
  38.                 ),
  39.                 // uncomment the following to enable URLs in path-format
  40.                 /*
  41.                 'urlManager'=>array(
  42.                         'urlFormat'=>'path',
  43.                         'rules'=>array(
  44.                                 '<controller:\w+>/<id:\d+>'=>'<controller>/view',
  45.                                 '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
  46.                                 '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
  47.                         ),
  48.                 ),
  49.                 */
  50.                 'db'=>array(
  51.                         'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',
  52.                 ),
  53.                 // uncomment the following to use a MySQL database
  54.                
  55.                 'db'=>array(
  56.                         'connectionString' => 'mysql:host=localhost;dbname=yiidb',
  57.                         'emulatePrepare' => true,
  58.                         'username' => 'testuser',
  59.                         'password' => 'mypass',
  60.                         'charset' => 'utf8',
  61.                 ),
  62.                
  63.                 'errorHandler'=>array(
  64.                         // use 'site/error' action to display errors
  65.             'errorAction'=>'site/error',
  66.         ),
  67.                 'log'=>array(
  68.                         'class'=>'CLogRouter',
  69.                         'routes'=>array(
  70.                                 array(
  71.                                         'class'=>'CFileLogRoute',
  72.                                         'levels'=>'error, warning',
  73.                                 ),
  74.                                 // uncomment the following to show log messages on web pages
  75.                                
  76.                                 array(
  77.                                         'class'=>'CWebLogRoute',
  78.                                 ),
  79.                                
  80.                         ),
  81.                 ),
  82.         ),
  83.  
  84.         // application-level parameters that can be accessed
  85.         // using Yii::app()->params['paramName']
  86.         'params'=>array(
  87.                 // this is used in contact page
  88.                 'adminEmail'=>'admin@site.ru',
  89.         ),
  90. );

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


-----
Just do it
 
 Top
Ezi
Отправлено: 15 Февраля, 2012 - 00:27:07
Post Id



Частый гость


Покинул форум
Сообщений всего: 242
Дата рег-ции: Дек. 2010  


Помог: 2 раз(а)




Panoptik пишет:
это идея зенд-фреймворка хранить конфиг данные в текстовых(ини) файлах
, мне нравится больше этот подход.
(Добавление)
и что с методом __go(); делать, переименовать? что за магические функции, я гуглил, ничего не понял


-----
Хочешь жить - умей вертеться
 
 Top
Bio man
Отправлено: 15 Февраля, 2012 - 01:31:42
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




Ezi, ну добавьте в имена приватных методов букву р, например, private function pGo($url), знаю для свойств принято, если можно так сказать, использовать _, например protected $_var;
насчет конфига - мне больше с ини файлом нравится. сам так делаю
 
 Top
Ezi
Отправлено: 15 Февраля, 2012 - 02:05:00
Post Id



Частый гость


Покинул форум
Сообщений всего: 242
Дата рег-ции: Дек. 2010  


Помог: 2 раз(а)




Bio man, благодарю за советы, так и сделаю.


Улыбка а в каком случае мой "класс" будет классом а не
Okula пишет:
Просто обёртка статичных функций.


-----
Хочешь жить - умей вертеться
 
 Top
Okula
Отправлено: 15 Февраля, 2012 - 08:19:37
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




Такой класс думаю никогда, потому что он работает только с одним конкретным сайтом и все параметры жёстко зашиты в нём.
Классы должны быть более абстрактными, гибкими.
 
 Top
Ezi
Отправлено: 15 Февраля, 2012 - 08:26:53
Post Id



Частый гость


Покинул форум
Сообщений всего: 242
Дата рег-ции: Дек. 2010  


Помог: 2 раз(а)




а понял вроде, мне необходимо сделать класс универсальным? тоесть для нескольких юзеров, к примеру:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. require ('/config/config.php');
  4. require ('/lib/class.php');
  5.  
  6. $users = array(
  7.   [ua] => array(
  8.     ua1,
  9.     ua2,
  10.   ), ......
  11. );
  12.  
  13. $user_0 = new Bot($users[ua][0], $users[sleep_min][0], $users[sleep_max][0], $users[enter_key][0], $users[sir_e][0]);
  14. $user_0->find_and_execute();
  15.  
  16.  
  17. $user_1 = new Bot($users[ua][1], $users[sleep_min][1], $users[sleep_max][1], $users[enter_key][1], $users[sir_e][1]);
  18. $user_1->find_and_execute();


-----
Хочешь жить - умей вертеться
 
 Top
EuGen Администратор
Отправлено: 15 Февраля, 2012 - 08:32:33
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Ezi
Классы, статичные/приватные методы, наследование/полиморфизм и т.п. - без понимания общей картины это лишь умные слова.
Суть в том, что вышесказанное есть лишь реализация объектно-ориентированного подхода в PHP. Иными словами, ООП существует независимо от своей реализации в конкретном языке. Поэтому вопрос "а является ли мой класс ООП" не имеет смысла.
Как только вы поймете принципы - что такое объектный подход - реализация получится сама собой. В теории можно представить себе реализацию объектного подхода и без использования классов в PHP.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
snikers987
Отправлено: 15 Февраля, 2012 - 08:39:37
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)





Не смотрел классы, но два действия в одном методе(судя по названию) это уже не верно.
EuGen
Цитата:
В теории можно представить себе реализацию объектного подхода и без использования классов в PHP.

А на практике?


-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
Ezi
Отправлено: 15 Февраля, 2012 - 08:46:43
Post Id



Частый гость


Покинул форум
Сообщений всего: 242
Дата рег-ции: Дек. 2010  


Помог: 2 раз(а)




snikers987 пишет:
А на практике?
ну у новичков же без ООП все, код стает оооочень большим.
(Добавление)
snikers987 пишет:
Не смотрел классы, но два действия в одном методе(судя по названию) это уже не верно.
почему?


-----
Хочешь жить - умей вертеться
 
 Top
snikers987
Отправлено: 15 Февраля, 2012 - 08:50:09
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




Ezi пишет:
snikers987 пишет:
А на практике?
ну у новичков же без ООП все, код стает оооочень большим.
(Добавление)
snikers987 пишет:
Не смотрел классы, но два действия в одном методе(судя по названию) это уже не верно.
почему?

Абсурд, "новичек" и ОПП не совместимые понятия, а аккуратный код может быть и в процедурном стиле, равно также как и не аккуратный в объектном. имхо

(Отредактировано автором: 15 Февраля, 2012 - 10:00:00)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB