2009-04-22 6 views
8

Sto provando a passare allo sviluppo di OOP e mi sto rivolgendo a questo perché sono stufo di cercare nel web e trovare solo le informazioni di base su quali classi sono e come possono ereditare gli uni dagli altri - che ho capito.Come OOP riesce a "includere" le classi memorizzate in file diversi

Quello che non capisco ancora è come tutte queste classi possono essere archiviate in file diversi, impreziosite da una struttura di cartelle, eppure tutto ciò che devi fare per usare la classe è solo menzionarne il nome nel codice. Come funziona esattamente?

E su una nota correlata, se qualcuno può consigliare un buon libro o tutorial online che fornirà una buona base in OOP (preferibilmente basato su PHP) sarei molto grato.

+0

Questo è molto specifico per PHP, immagino. Non vi è alcuna idea di includere i file in OOP. Qualsiasi file di codice sorgente può contenere zero a molte classi. Tranne alcune lingue stupide, dove c'è solo una classe per file. –

risposta

4

La risposta tecnologica è PHP Autoloading.

La risposta implementazione è questo:

Un metodo comune utilizzato ha a che fare con i nomi delle classi relative alla struttura delle cartelle. Ci sono articoli là fuori, ma ecco un breve riassunto:

Quando si imposta il codice di caricamento automatico, prendere il nome della classe e sostituire i caratteri di sottolineatura con le barre. In questo modo puoi organizzare le tue classi in cartelle.

Ad esempio:

Classname: Database_Provider_MySQL

File: database/provider/MySQL.php

Quindi, in caricamento automatico, che ci si prende il nome di classe in entrata, sostituire le sottolineature con barre. Quindi includi quel file specifico.

Questo raggiunge ciò che stai cercando di realizzare, puoi semplicemente caricare una classe creando una nuova istanza di essa. Non devi mai usare la dichiarazione di inclusione per queste classi.

Ricordarsi di non andare in profondità dove si finisce con 6+ livelli. Penso che tra 3 e 5 sia un buon massimo.

Inoltre, questo richiede di mantenere solo 1 classe per file (simile a Java). Sebbene possa sembrare scomodo, rende molto più semplice localizzare il codice.

+1

Alla ricerca di pochi termini in questa risposta ho trovato un tutorial abbastanza decente http://www.brainbell.com/tutorials/php/TOC_oop.html – wheresrhys

6

PHP ha funzionalità per caricare automaticamente i file in base ad alcune chiamate effettuate. PHP: Autoloading Objects sono le tue risorse definitive in materia.

2

ho un'osservazione, anche se io sono enormi (eufemismo) fan di PHP (giù me tutto quello che volete votare, non mi interessa! Un giorno ci sarà accettato ;-), PHP non è davvero il percorso che vuoi seguire quando impari OOP.

PHP fa le cose, beh, diverse. Diverso è buono, non fraintendermi, io amo diverso, ma è anche non convenzionale. Non convenzionale, anche buono, quasi un sinonimo per Google, se me lo chiedi, ma non viviamo in un mondo non convenzionale! Non puoi semplicemente andare da qualcuno e dirlo; "Ehi, conosco OOP, l'ho imparato in PHP". Può fare rima, ma le persone non ti prenderanno sul serio dopo. Non chiedermi perché, ma è vero quanto le banane gialle. Ci sono stato.

quindi se vuoi imparare OOP convenzionale, prova Java. è convenzionale come vengono (che non è né buono né cattivo).

Onestamente non mi sono mai tirato su tante volte in un post di 20 frasi. Devo guardare ma 'rep però. :-D

1

Ho trovato estremamente utile guardare il codice esistente quando i miei sforzi di ricerca colpiscono un muro. Ci sono un sacco di script, pacchetti, framework e applicazioni che seguono eccellenti pratiche di codifica PHP che possono essere studiate e apprese. Ci sono state diverse domande su SO che indicano un paio di buone.

Il mio preferito finora è stato il Zend Framework.

2

L'impostazione di configurazione include_path di PHP indica a PHP quali directory cercare i file.

Se si fa qualcosa di simile:

<?php include 'MyClass.php'; ?> 

Poi PHP ricerche la directory corrente per 'MyClass.php' e poi ricerche qualsiasi directory sul include_path se non riesce a trovare il file.Molte librerie di classi fare qualcosa di simile:

<?php 

// Set the ini page to the base package directory 
ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . dirname(__FILE__)); 

// Now, in all of your sub-directories, you can still do things like this: 
include 'Subdirectory/Anothersub/AnotherClass.php'; 

// Now use the class 
$obj = new AnotherClass(); 

?> 

Può essere ulteriormente semplificata con auto-caricamento: http://us.php.net/autoload

Altre biblioteche appena comprendono tutti i file che l'uso destra fuori del blocco nel file del pacchetto di base, in modo che tutti quelle lezioni sono disponibili immediatamente.

2

Diversi linguaggi/framework lo fanno in modi diversi, ma è essenziale riportare un elenco predefinito di percorsi predefiniti da cercare e/o specificare dove cercare (come lo si fa di nuovo dipende dalla lingua/framework). So che la domanda è taggata come php ma la domanda non menziona specificamente php quindi ho pensato di dare una risposta leggermente più generale

0

Quello che stai descrivendo non ha nulla a che fare con la programmazione orientata agli oggetti di per sé. È solo una funzionalità di alcune lingue specifiche. Quelle lingue lo fanno applicando una sorta di convenzione per il modo in cui i file vengono archiviati (ad esempio, la classe foo.bar.quux potrebbe trovarsi in una posizione standard su foo/bar/quux.py).

0

http://www.headfirstlabs.com/books/hfooad/

Head First Object Oriented Analysis and Design. Head First è una grande serie di libri con esempi semplici ma sorprendentemente utili. Il loro intero modo di presentarti le informazioni è fantastico. Potrebbero anche avere alcuni libri php orientati agli oggetti!