PHP Framework

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Fabian M

Fabian M

10/08/2011 22:21:50
Quote Anchor link
Ik ben bezig met het schrijven van een PHP framework/cms:

https://github.com/FabianM/FaabBB

Er is nog maar weinig, maar hebben jullie verbeter punten?
 
PHP hulp

PHP hulp

03/11/2024 19:23:26
 
Ozzie PHP

Ozzie PHP

10/08/2011 22:37:08
Quote Anchor link
Ik heb een vraagje... in een van je bestanden zie ik dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
define('PHP_SUFFIX', '.php');
define('INI_SUFFIX', '.ini');

// Define the directory seperator.
define('DS', DIRECTORY_SEPARATOR);
define('ROOT', dirname(__FILE__)  . DS .  '..');
define('CORE_FOLDER', ROOT . DS . 'core');
define('CORE_LIBRARY_FOLDER', CORE_FOLDER . DS . 'lib');
define('CLASSES_FOLDER', ROOT . DS . 'classes' . DS);
define('DATA_FOLDER', ROOT . DS . 'data');
define('CONFIGURATION_FILE', DATA_FOLDER . DS . 'configuration' . INI_SUFFIX);
define('CORE_LOG_FILE', CORE_FOLDER .  DS . '..' . DS . 'data' . DS . 'logs' . DS . 'core.log');
define('ERROR_HANDLING_METHOD', "CoreErrorHandler::onError");
define('EXCEPTION_HANDLING_METHOD', "CoreErrorHandler::onException");
define('SHUTDOWN_HANDLING_METHOD', "CoreErrorHandler::onShutdown");
define('DEBUG', 2);

// Here we import the core classes.
include(CORE_FOLDER . DS . 'CoreConfigurationLoader' . PHP_SUFFIX);
include(CORE_FOLDER . DS . 'CoreState' . PHP_SUFFIX);
include(CORE_FOLDER . DS . 'CoreLogger' . PHP_SUFFIX);
include(CORE_FOLDER . DS . 'CoreException' . PHP_SUFFIX);
include(CORE_FOLDER . DS . 'CoreLibraryLoader' . PHP_SUFFIX);
include(CORE_FOLDER . DS . 'CorePharCreator' . PHP_SUFFIX);
include(CORE_FOLDER . DS . 'CoreErrorHandler' . PHP_SUFFIX);
?>


Het ziet er op zich netjes uit, maar wat ik me dus afvraag... waarom DEFINE je een PHP_SUFFIX, een INI_SUFFIX en een DS(directory separator)?

Dat verandert toch nooit? Is dat dan geen overkill? Vervolgens ga je uit al die defines je include-paden opbouwen wat volgens mij niet ten goede komt aan je performance.

Dit:

include(CORE_FOLDER . DS . 'CoreErrorHandler' . PHP_SUFFIX);

kun je toch gewoon vervangen door:

include CORE_FOLDER . '/CoreErrorHandler.php';

Beter toch?
 
Fabian M

Fabian M

11/08/2011 00:23:56
Quote Anchor link
Ten eerste, inderdaad, de PHP_SUFFIX verandert nooit, en daarom is het een constant (constantly variable)

Ten tweede heb ik wat benchmarks gedaan en:

Zonder Constants: Took 0.00025105476379395 miliseconds
Met Constants: Took 0.00065803527832031 miliseconds

Code 1:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$start
= microtime(true);

include 'script.php';

$end = microtime(true);

echo 'Took ' . ($end - $start) . ' miliseconds';

?>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$start
= microtime(true);

define('FOLDER', dirname(__FILE__));
define('DS', '/');
define('PHP_SUFFIX', '.php');
include FOLDER . DS . 'script' . PHP_SUFFIX;

$end = microtime(true);

echo 'Took ' . ($end - $start) . ' miliseconds';

?>


Dit schilt echter zo weinig dat ik me er niet ga over ontfermen.
Gewijzigd op 11/08/2011 00:24:39 door Fabian M
 
Ozzie PHP

Ozzie PHP

11/08/2011 01:01:51
Quote Anchor link
Waar het mij om gaat is... waarom je alles in DEFINES stopt.

"Ten eerste, inderdaad, de PHP_SUFFIX verandert nooit, en daarom is het een constant (constantly variable)"

Ik ben gewoon benieuwd waarom je een bestandsextensie in een define stopt. Misschien zie ik het verkeerd, maar het komt op mij over alsof je het jezelf onnodig moeilijk maakt. Weet je wat laat ik eens in plaats van .php overal PHP_SUFFIX gaan typen. Die .php zal toch nooit anders worden... dat is eigenlijk wat ik bedoel.

Ik ben benieuwd hoe andere members hier tegenaan kijken...
 
Write Down

Write Down

11/08/2011 01:06:11
Quote Anchor link
@Ozzie

Ben het helemaal met je eens. Verder vind ik elk mogelijk tijdverschil toch niet onverstandig om is over na te denken. Je moet enigszins de keuze maken tussen snelheid (performance) en gemak. In dit geval denk ik dat op beide punten kan winnen, weg met onnodige constanten en dan volgt het twee ook. Time is money!

(typo)
Gewijzigd op 11/08/2011 01:06:38 door Write Down
 
Ozzie PHP

Ozzie PHP

11/08/2011 01:09:49
Quote Anchor link
Gelukkig iemand die mijn mening deelt :)
 
Fabian M

Fabian M

11/08/2011 08:53:42
Quote Anchor link
Dus grote PHP frameworks zoals CakePHP kiezen ook voor gemak?

https://github.com/cakephp/cakephp/blob/master/index.php
 
The Force

The Force

11/08/2011 10:22:25
Quote Anchor link
Ozzie PHP op 10/08/2011 22:37:08:
Dit:

include(CORE_FOLDER . DS . 'CoreErrorHandler' . PHP_SUFFIX);

kun je toch gewoon vervangen door:

include CORE_FOLDER . '/CoreErrorHandler.php';

Beter toch?

Nee. Windows gebruikt '\' en Unix systemen '/'. Als je je framework op IIS wilt zetten dan hoef je enkel DS aan te passen als je het op de manier van Fabian doet.

Write Down op 11/08/2011 01:06:11:
@Ozzie

Ben het helemaal met je eens. Verder vind ik elk mogelijk tijdverschil toch niet onverstandig om is over na te denken.

Als je het verstandig vind om rekening te gaan houden met een performancewinst van vier tienduizenste van een milliseconde dan ben je naar mijn inzien verkeerd bezig. Het is veel belangrijker om op een goede manier te coden en je script goed onderhoudbaar, portabel e.d. te maken. PHP performance optimalisatie is iets waar alleen de grote websites op het web zich druk om hoeven te maken. Veel belangrijker is om je content te comprimeren, gzippen, enzovoorts. Dat kan je een paar seconden laadtijd schelen.

Edit:
Mijn feedback over het framework: het is nog erg in opbouw. Wat ik zie ziet er opzich goed uit. In de class Object viel me het volgende op:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
    /**
     * Constructs a new Object.
     */

    public function __construct() {
        $this->construct();
    }


    /**
     * Constructs a new Object.
     */

    public function construct() {

    }

?>

Dit lijkt me een beetje dubbel en ik zie er het voordeel niet van in. Een class die van Object overerft kan toch met parent::__construct(); deze aanroepen. Of wil je als het object al bestaat nogmaals construct() kunnen aanroepen?

MVC zou ik er echt gaan inbouwen. Ik zie ook nergens iets als autoloading ( http://php.net/manual/en/language.oop5.autoload.php ). Dat kan wel erg handig zijn voor lazy loading van objecten. Hoe wil je in de controller zo framework functionaliteit gaan aanroepen? $this->classname->method() vind ik zelf een fijne manier hiervoor.
Gewijzigd op 11/08/2011 10:39:02 door The Force
 
Fabian M

Fabian M

11/08/2011 10:30:36
Quote Anchor link
Ben het met The Force eens.
 
Kees Schepers

kees Schepers

11/08/2011 10:38:49
Quote Anchor link
Die benchmark slaat natuurlijk ook nergens op, je kunt niet met zekerheid stellen dat deze geldig is omdat de server op dat moment niet even met een ander proces bezig was. Het is beter om dezelfde test 1000x uit te voeren bijvoorbeeld per methode en dat te benchmarken.
 
Fabian M

Fabian M

11/08/2011 11:35:30
Quote Anchor link
Kees Schepers op 11/08/2011 10:38:49:
Die benchmark slaat natuurlijk ook nergens op, je kunt niet met zekerheid stellen dat deze geldig is omdat de server op dat moment niet even met een ander proces bezig was. Het is beter om dezelfde test 1000x uit te voeren bijvoorbeeld per methode en dat te benchmarken.


Omdat PHP in een ander process wordt uitgevoerd, kan de server geen invloed hebben op het interpreteren van de PHP code/uitvoeren.
 
Ozzie PHP

Ozzie PHP

11/08/2011 11:47:00
Quote Anchor link
Precies wat Kees zegt. Die benchmark 1x uitvoeren terwijl je alleen al in dit ene bestand 20 paden op die manier opbouwt klopt natuurlijk niet. En als je bij iedere actie denkt... acht die paar milliseconden... dan heb je aan het eind van je framework ineens een halve seconde tijdsverschil opgebouwd. Lijkt me niet zinvol.

The Force op 11/08/2011 10:22:25:
Ozzie PHP op 10/08/2011 22:37:08:
Dit:

include(CORE_FOLDER . DS . 'CoreErrorHandler' . PHP_SUFFIX);

kun je toch gewoon vervangen door:

include CORE_FOLDER . '/CoreErrorHandler.php';

Beter toch?

Nee. Windows gebruikt '\' en Unix systemen '/'. Als je je framework op IIS wilt zetten dan hoef je enkel DS aan te passen als je het op de manier van Fabian doet.


Correct me if I'm wrong, maar Windows IIS werkt prima met een forward slash hoor! Dus zoals ik het zie zijn zowel de defines voor de DS (directory seperator) als de defines voor bestandsextenties totaal overbodig.
 
Fabian M

Fabian M

11/08/2011 11:48:10
Quote Anchor link
The Force op 11/08/2011 10:22:25:
Edit:
Mijn feedback over het framework: het is nog erg in opbouw. Wat ik zie ziet er opzich goed uit. In de class Object viel me het volgende op:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
    /**
     * Constructs a new Object.
     */

    public function __construct() {
        $this->construct();
    }


    /**
     * Constructs a new Object.
     */

    public function construct() {

    }

?>

Dit lijkt me een beetje dubbel en ik zie er het voordeel niet van in. Een class die van Object overerft kan toch met parent::__construct(); deze aanroepen. Of wil je als het object al bestaat nogmaals construct() kunnen aanroepen?

MVC zou ik er echt gaan inbouwen. Ik zie ook nergens iets als autoloading ( http://php.net/manual/en/language.oop5.autoload.php ). Dat kan wel erg handig zijn voor lazy loading van objecten. Hoe wil je in de controller zo framework functionaliteit gaan aanroepen? $this->classname->method() vind ik zelf een fijne manier hiervoor.


Die tweede constructor ga ik er uit halen en een MVC pattern ga ik er zeker in implementeren.
 
Fabian M

Fabian M

14/08/2011 19:04:15
Quote Anchor link
Heb een simpel MVC pattern geimplementeerd.
 

15/08/2011 12:35:16
Quote Anchor link
Waarom doe je met de includes zo moeilijk? Ja kan toch ook gewoon je include path veranderen?

Edit:
Voor het aanmaken van nieuwe classes moet je echt een autoloader maken.
Gewijzigd op 15/08/2011 12:37:38 door
 
Kees Schepers

kees Schepers

15/08/2011 12:46:36
Quote Anchor link
Waarom wordt er hier eigenlijk voor gekozen om een eigen framework te bouwen en niet een CMS op een bestaand framework bijvoorbeeld?
 
Ozzie PHP

Ozzie PHP

15/08/2011 13:00:29
Quote Anchor link
Kees Schepers op 15/08/2011 12:46:36:
Waarom wordt er hier eigenlijk voor gekozen om een eigen framework te bouwen en niet een CMS op een bestaand framework bijvoorbeeld?

Misschien vind je hier jouw antwoord...

http://www.phphulp.nl/php/forum/topic/discussie-eigen-cms-of-niet/78551/
 
Kees Schepers

kees Schepers

15/08/2011 15:07:44
Quote Anchor link
Mwah die discussie gaat meer over of je zelf een CMS wilt bouwen of niet. Die keuze zou ik ergens nog kunnen begrijpen maar om ook meteen het hele framework eronder ook te gaan bouwen van ik erg ambitieus en onzin als je een goed systeem wilt bouwen.
 
Fabian M

Fabian M

15/08/2011 16:42:50
Quote Anchor link
Allard Jansen op 15/08/2011 12:35:16:
Waarom doe je met de includes zo moeilijk? Ja kan toch ook gewoon je include path veranderen?

Edit:
Voor het aanmaken van nieuwe classes moet je echt een autoloader maken.


Een autoloader is niet om nieuwe classen te laden. En als ik een autoloader gebruik voor includes, gaan programmeurs slordig worden oa bestanden niet meer includen.

Kees Schepers op 15/08/2011 12:46:36:
Waarom wordt er hier eigenlijk voor gekozen om een eigen framework te bouwen en niet een CMS op een bestaand framework bijvoorbeeld?



Ik heb er voor gekozen om een nieuw framework te maken, omdat je hier veel meer van leert, dan dat je een framework zoals Zend gebruikt.
 
Kees Schepers

kees Schepers

15/08/2011 16:50:01
Quote Anchor link
Hmm oke in dat geval begrijp ik de keuze wel :) Succes ermee!
 
Niels K

Niels K

15/08/2011 18:56:56
Quote Anchor link
In object.php zie ik de methode toString? Waarom? Gewoon echo van het object is toch prima? Dat vind ik overkill ;) Daar kan je jezelf beter druk om maken dat het bovenstaande denk ik .. Of niet?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
public final function getClass() {
    return new Class_(__CLASS__);
}

?>


Moet het niet zijn getObject? Maar wat voor nut heeft deze functie? Denk je zelf dat hij heel veel gebruikt gaat worden?

Daarnaast, in heel methode ontbreken controles of bijvoorbeeld: De file bestaat, de class bestaat, de methode bestaat.. Etc

Voor de basis van een MVC framework zou je misschien deze tutorial kunnen volgen? klik

Voor de rest ziet het er wel leuk uit!
Wat ook wel een mooi Framework is, één van onze bezoekers in het volgende: klik.. Er is ook nog een topic over: klik

Veel succes, goed op weg!

Niels
Gewijzigd op 15/08/2011 18:59:27 door Niels K
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.