Автор Тема: MVC framework #5 – Loader(3)  (Прочетена 1510 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

metost

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 13
  • -Получени: 41
  • Публикации: 764
MVC framework #5 – Loader(3)
« -: 24 Януари 2013, 04:10:01 »
** Тази тема дискутира:: MVC framework #5 – Loader(3)**
Автор: gatakka
« Последна редакция: 16 Април 2015, 22:45:34 от Avalanche »
(рɐǝɥ ɹпoʎ uɹпʇ ʇ,uoр)

geny

  • Newbie
  • *
  • Благодарности
  • -Казани: 1
  • -Получени: 0
  • Публикации: 2
Re: MVC framework #5 – Loader(3)
« Отговор #1 -: 28 Януари 2013, 10:54:52 »
Здравейте Гатака,
Благодаря за всичко, което сте оставил в този сайт - невероятно е. Няма друго място в българския нет, където да могат да се намерят толкова много и качествени материали за PHP. Ползвам Codeigniter и това, което виждам тук ми е изключително ценно и доста Ваши идеи съвпадат  с някои от нещата, които познавам в тази връзка.
До някъде следих и писах заедно с видеото, но тук или на следващия урок заседнах заради грешка - добре би било да има и малко код, някои го правят / Jeffry Way/, но все пак Вие сте автора.... на следващото гледане ще си намеря грешката  :)
Имате дарба да показвате нещата, така че да не можеш да се откъснеш до края всичко по темата - Вие си знаете как съвместявате този труд с другите си ангажименти, но... още веднъж БЛАГОДАРЯ!

HanKrum

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 120
  • -Получени: 73
  • Публикации: 988
  • Кибик
Re: MVC framework #5 – Loader(3)
« Отговор #2 -: 28 Януари 2013, 18:18:16 »
Питай, аз изгледах всичко 3 пъти, може и да помогна :)
"Силата на правителството се крепи на невежеството на народа, и те знаят това и винаги ще се борят против просвещението." Лев Толстой

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3623
Re: MVC framework #5 – Loader(3)
« Отговор #3 -: 28 Януари 2013, 19:44:22 »
Здравейте Гатака,
Благодаря за всичко, което сте оставил в този сайт - невероятно е. Няма друго място в българския нет, където да могат да се намерят толкова много и качествени материали за PHP. Ползвам Codeigniter и това, което виждам тук ми е изключително ценно и доста Ваши идеи съвпадат  с някои от нещата, които познавам в тази връзка.
До някъде следих и писах заедно с видеото, но тук или на следващия урок заседнах заради грешка - добре би било да има и малко код, някои го правят / Jeffry Way/, но все пак Вие сте автора.... на следващото гледане ще си намеря грешката  :)
Имате дарба да показвате нещата, така че да не можеш да се откъснеш до края всичко по темата - Вие си знаете как съвместявате този труд с другите си ангажименти, но... още веднъж БЛАГОДАРЯ!

Програмирането много прилича на импровизацията в джаз музиката.

Повече от 20г бях професионален музикант и не съм срещал някой от големите да нотира импровизациите си, не защото е невъзможно а защото е безсмислено.

Единственото, което те правят е да очертаят пътя и основните похвати (методи) в импровизацията.

Тук (в програмирането) е същото. 

Джефри е много добър, но както знаеш е все още младо чакалче  ;)
« Последна редакция: 28 Януари 2013, 20:01:59 от jazzman »
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

borisov87

  • Newbie
  • *
  • Благодарности
  • -Казани: 1
  • -Получени: 0
  • Публикации: 40
Re: MVC framework #5 – Loader(3)
« Отговор #4 -: 04 Март 2013, 13:47:46 »
index.php
Код: PHP
  1. <?php
  2. include '/home/vankata/www/vf/App.php';
  3. $app= \VF\App::getInstance();
  4. //Ето тук ми дава грешката въобще не ми дава да заредя класа Loader,просто въобще не ми го дописва автоматично само класа App ми дава да зареждам
  5. $app= \VF\Loader
  6. $app->run();
  7. //new \VF\Test();
  8. new \Test\Models\User();
App.php
Код: PHP
  1. <?php
  2.  
  3. /*
  4.  * To change this template, choose Tools | Templates
  5.  * and open the template in the editor.
  6.  */
  7.  
  8. /**
  9.  * Description of App
  10.  *
  11.  * @author vankata
  12.  */
  13. namespace VF;
  14. include_once 'Loader.php';
  15. class App {
  16.     //свойство което ще държи инстанцията
  17.     private static $_instance=null;
  18.     private function __construct() {
  19.         \VF\Loader::registerNamespace('VF', dirname(__FILE__).DIRECTORY_SEPARATOR);
  20.         \VF\Loader::registerAutoLoad();
  21.     }
  22.  
  23.     public function run() {
  24.         }
  25.         //Проверяваме дали вече е правена инстанция, ако не е правим нова
  26.     /**
  27.      *
  28.      * @return type \VF\App
  29.      */    
  30.     public static function getInstance(){
  31.             if (self::$_instance==NULL){
  32.                 self::$_instance=new \VF\App();
  33.             }
  34.             return self::$_instance;
  35.         }
  36. }
  37.  
Loader.php
Код: PHP
  1. <?php
  2.  
  3. /*
  4.  * To change this template, choose Tools | Templates
  5.  * and open the template in the editor.
  6.  */
  7.  
  8. /**
  9.  * Description of Loader
  10.  *
  11.  * @author vankata
  12.  */
  13.  
  14. namespace VF;
  15.  
  16. final class Loader {
  17.  
  18.     private static $namespaces = array();
  19.  
  20.     private function __construct() {
  21.        
  22.     }
  23.  
  24.     public static function registerAutoLoad() {
  25.         spl_autoload_register(array("\VF\Loader", 'autoLoad'));
  26.     }
  27.  
  28.     public static function autoLoad($class) {
  29.         self::loadClass($class);
  30.     }
  31.  
  32.     public static function loadClass($class) {
  33.         foreach (self::$namespaces as $k => $v) {
  34.             if (strpos($class, $k) === 0) {
  35.                 $file = realpath(substr_replace(str_replace('\\', DIRECTORY_SEPARATOR, $class), $v, 0, strlen($k)) . '.php');
  36.                 var_dump($file);
  37.                 if ($file && is_readable($file)) {
  38.                     include $file;
  39.                 }
  40.                 else{
  41. //TODO
  42.                     throw new \Exception('File cannot be included' . $file);
  43.             }
  44.             break;
  45.         }
  46.     }
  47.     }
  48.     public static function registerNamespace($namespace, $path) {
  49.         $namespace = trim($namespace);
  50.         if (strlen($namespace) > 0) {
  51.             if (!$path) {
  52.                 throw new \Exception('Invalid path');
  53.             }
  54.             $_path = realpath($path);
  55.             if ($_path && is_dir($_path) && is_readable($_path)) {
  56.                 self::$namespaces[$namespace . '\\'] = $_path . DIRECTORY_SEPARATOR;
  57.             } else {
  58. //TODO          
  59.                 throw new \Exception('Namespace directory read error:' . $path);
  60.             }
  61.         } else {
  62. //TODO
  63.             throw new \Exception('Invalid namespace' . $namespace);
  64.         }
  65.     }
  66. }
  67.  
стигнал съм до 10-11 минута от клипа където правим тестови клас, там в индекса се извиква
\VF\Loader но при мен като напиша namespace-а \VF\ и ми дава да викам само класа App , а Loader въобще не ми дава да го дописва ,може само ръчно да го пиша, защо се получава така?
« Последна редакция: 04 Март 2013, 17:46:45 от borisov87 »

borisov87

  • Newbie
  • *
  • Благодарности
  • -Казани: 1
  • -Получени: 0
  • Публикации: 40
Re: MVC framework #5 – Loader(3)
« Отговор #5 -: 04 Март 2013, 15:54:51 »
същата работа е и урока за config
$config=\VF\Config::getInstance;
$config->setConfigFolder();
 не ми го дописва автомаично а ръчно трябва да ги дописвам;
« Последна редакция: 04 Март 2013, 15:58:35 от borisov87 »

lisi4ok

  • Newbie
  • *
  • Благодарности
  • -Казани: 1
  • -Получени: 0
  • Публикации: 4
Re: MVC framework #5 – Loader(3)
« Отговор #6 -: 25 Юни 2013, 22:51:37 »
Мда и при мен е така.
Изкарва ми само ОК :) ехото

    public function run() {
        echo 'ok';
    }

Може човека да не е искал да копираме всичко 1към1 а да помислим малко с главите си :)
Макар че аз още ми е малко мъгла това ООП.
Гледах уроците и пак ми е доволно мъгла.

Наистина ще ми е по добре ако видя една добре направена система а не от ония релеаснати манджи.
Работих и във фирма и там манджа.
Трябва ми един Фрейм с ясни функции и добре написан. Наистина кода на иван ми харесва.
Не е батак!
Преди нямаше такива клипове и се учехме от готови кодове.
Ако някой все пак постне някакъв подобен фейм ще е супер!
« Последна редакция: 25 Юни 2013, 22:55:35 от lisi4ok »

relax4o

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 14
Re: MVC framework #5 – Loader(3)
« Отговор #7 -: 29 Август 2013, 01:14:55 »
Изглежда въобще не слушате @gatakka, а и се вижда, че не сте много наясно с ООП.

1. Конструктора на Loader е дефиниран като private, т.е. този клас не може да бъде инстанцииран по никакъв начин и това е основната идея на автора на урока. Този клас не бива да бъде викан никъде. Има за цел да зарежда класовете, затова се правят статични методи, които да могат да се извикат в конструктора на App. Изрично автора каза, че Loader.php ще е единствения файл, който ще е хардкод извикан в друг файл клас.
2. Не е ясно какво всъщност искаш да направиш с това

Код: PHP
  1. $app = \VF\Loader;
  2.  

2.1. Така не се вика клас, трябва да сложиш ключовата дума new отпред. И все пак, няма как да го извикаш. Защо ? Прочети първа точка.
3. Ако не си схванал защо класа е final, то да обясня. Класа се прави final, когато не искаме да участва в дъщерен. Т.е. не искаме да позволяваме да може да бъде наследяван(extended) от друг клас. Както казах по-горе, този клас не трябва да се инстанцира, има за цел да зарежда и регистрира namespaces + класове.


Защо не успява да ти се извика конфиг класа ?

1. Има огромна разлика, когато викаш свойство(property) и когато викаш метод(функциите в класовете).
Ти правиш следното нещо:

Код: PHP
  1. $config = \VF\Config::getInstance;
  2.  

което в случая се мъчи да намери свойство с име getInstance, а не метод. Когато искаш да извикаш метод, то задължително трябва да сложиш двете скоби накрая (), за да покажеш на интерпретатора, че това нещо трябва да се приема като статична функция, а не като статично свойство.


Надявам се да съм бил изчерпателно подробен.

ЕДИТ: \VF\Config::getInstance се обърках - няма да търси за свойство, а за константа, защото ако беше свойство, трябваше да има специфичното доларче за променлива.
« Последна редакция: 01 Септември 2013, 16:31:21 от relax4o »