Domanda

Ci sono molti dibattiti su se Object Oriented Programming è buona o no. Ma, usando OOP in PHP è più lento. Sarebbe un buon commercio da usare programmazione procedurale e la velocità più veloce e OOP con velocità inferiore (dal momento che le classi devono essere avviati ogni volta che una pagina carichi e grandi siti web inizierà a diventare lento).

Ancora più importante, sarebbe bene per avvolgere roba dentro una classe e utilizzare le funzioni statiche o sarebbe meglio avere solo molte funzioni che si trovano con un prefisso ex:. Wp_function ()

È stato utile?

Soluzione

Sì, è quasi sempre una buona idea usare OOP. Questo perché OOP è uno stile di codifica e codifica stili per la maggior parte sono facilmente in grado di essere trasferiti accross lingue.

Le persone non usano la codifica-styles perché utilizzano una determinata lingua. Le persone usano stili di codifica perché lo stile di codifica offre buoni metodi per fare le cose che si sentono sono desiderabili. Pertanto, fino a quando gli elementi di base sono lì (ereditarietà, proprietà di classe, ecc), sarà sempre praticabile per scrivere in quello stile di codifica.

No, utilizzando le funzioni procedurali per accedervi, probabilmente non è una buona idea. Questo perché, probabilmente dovrà fare qualcosa di simile per mantenere lo stato.

function myFunc()
{
    global $class;
    $class->doMethod();
}

function myFunc2()
{
    global $class;
    $class->doMethod2();
}

Questa è una cattiva idea in quanto crea una tonnellata di stato globale.

Altri suggerimenti

Se il motivo siete preoccupati usando OO con PHP è la velocità, la paura non: PHP è un linguaggio lento tutto intorno. Se stai facendo qualcosa che è sufficiente per la perdita di velocità di utilizzare gli oggetti alla materia intensivo del processore, non si dovrebbe usare PHP a tutti.

Per quanto riguarda funzioni statiche, questa è una scelta di progettazione, ma io err sul lato di evitare classi composte interamente di funzioni statiche. Non c'è davvero alcun vantaggio sopra i prefissi, e l'utilizzo di un costrutto solo perché è non è una buona idea.

Gli stessi argomenti relativi alle prestazioni sono state fatte su Objective C e C ++ di nuovo nel corso della giornata. E la risposta a questo problema è stato quello di usufruire di memoria disponibile e la potenza di elaborazione che viene continuamente sempre più grande, migliore e più veloce.

Sì, OO richiede più risorse per l'esecuzione. Ma i vantaggi di utilizzare OO superano il costo dell'hardware $$ (che rischia di essere insignificante) di supportare applicazioni OO.

E ', comunque, una buona cosa di essere preoccupato per le prestazioni del software. Tuttavia guardando sotto il cofano della procedura oo contro come un punto di partenza è un po 'fuorviante. Hai bisogno di essere concentrata sulla scrittura di codice efficiente per cominciare, sia procedurale o OO (ed entrambi sono rilevanti).

Tenete a mente che anche se PHP non può essere la piattaforma più veloce là fuori (Java, per esempio, prende il suo calcio) di PHP è utilizzato per alimentare alcuni dei maggior parte del traffico siti web pesanti su Internet:. Ovvero Facebook

Se avete altri dubbi su PHP e OO, basta guardare a Zend e di Magento (sulla base di Zend). Magento è un molto Piattaforma alta intensità di risorse, l'utilizzo della memoria può essere verso l'alto di 36 MB per istanza. Tuttavia la piattaforma stessa è in grado di gestire milioni di visite. Questo perché un ambiente di server configurato correttamente con una porzione sana delle risorse hardware fare tutti i vantaggi di utilizzare OO lontano eclissare il costo del server stesso. Ma in un mondo di computer cluster, non usando la potenza di elaborazione e la memoria (responsabilmente) a vostra disposizione è - secondo me -. Follia clinica

A mio modesto parere, gli sviluppatori PHP non dovrebbero cercare di andare solo una direzione. (Procedurale vs orientata agli oggetti) In alcuni casi, tutto ciò che serve è un paio di funzioni globali, altre volte è più utile per utilizzare gli oggetti. Non cercare di forzare ogni cosa in un modo o l'altro, essere flessibili e utilizzare quello che funziona meglio per ogni situazione.

Non sono d'accordo fortemente con la risposta di Chacha102.

Una risposta adeguata a questa domanda potrebbe riempire diversi libri -. Non importa un post 20 linee qui

Entrambi gli approcci hanno i loro vantaggi e svantaggi. Consiglierei a chiunque che voglia considerarsi un buon programmatore di avere una significativa esperienza in programmazione procedurale, non procedurale e orientata agli oggetti. Come pure l'esperienza con diverse metodologie, come SCRUM, a cascata e RAD.

Per quanto riguarda phps idoneità OO vs codifica procedurale, certamente le radici del linguaggio sono in quest'ultimo (ma nota che sia Java e ASP sono ibridi piuttosto che veri linguaggi OO).

Peronally, tendo a scrivere codice procedurale quando ho bisogno di produrre qualcosa che è o molto semplice o deve avere il suo comportamento da thouroughly definito e prevedibile. Tuttavia durante la scrittura di codice complesso in cui il comportamento varierà notevolmente a run-time, trovo OO di essere molto più efficiente in termini di tempo di sviluppo - nonostante la progettazione di essere basata su un insieme finito di casi d'uso

.

Per sostenere che si dovrebbe sempre scrivere codice procedurale perché sarà correre più veloce di codice OO:

1) non è necessariamente vero 2) ignora totalmente il costo relativo del tempo sviluppatore vs costi di hardware

  

sarebbe bene per avvolgere roba dentro una classe e utilizzare le funzioni statiche

Dato che gli spazi dei nomi sono ora disponibili in PHP, questo è un modo davvero disordinato per evitare collisioni namespace e non qualcosa che mi sento di raccomandare.

C.

Non c'è davvero nessuna risposta perfetta in quanto dipende da così tante variabili sconosciute, e quindi non deve essere tutto o niente.

Ad esempio, se si divide l'applicazione nel modello MVC, si potrebbe avere il vostro modello sia OO ma tenere il controller più semplicisticamente procedurale.

Si potrebbe utilizzare classi come un mezzo per semplicemente gruppo di funzioni statiche comuni, o si potrebbe prendere molto più lontano nel modello record attivo.

Se si sta costruendo una piccola singola pagina webform che spara un POST fuori in una e-mail, è davvero non hanno bisogno OO -. Perché non si forse includere una classe di posta esistente a leva

Nessuno può dare consigli corretta senza capire il progetto si sta assumendo.

Detto questo, se la vostra unica preoccupazione è la velocità, quindi OO essere un po 'più lento. E c'è un sacco di cose che si possono fare subdolo in anche PHP procedurale di imitare alcuni dei guadagni OO. Ma a meno che non si sta assumendo un grande progetto, l'overhead aggiunto non sarà mai un gran che. E per il momento si dispone di un grande progetto, i pro di OO potrebbero superare i contro della sua testa.

ero curioso di questo me stesso. Purtroppo dopo ho cambiato il mio codice procedurale oop Ho eseguito alcuni parametri di riferimento e non in anticipo.

Ecco il codice di riferimento.

class game{
  function maxp($val){
    return max(0,pow($val,0.5));        
  }
}

$game = new game;

for($i=0;$i<100000;$i++){
  $game->maxp(100);
  //game::maxp(100);
}

Risultati OOP variavano tra 0,13 e 0,2 secondi;

Risultati procedurali compresi tra 0,08 e 0,1 secondi.

I risultati sono rimasti coerenti nel corso di un buon periodo di tempo.

Vi incoraggio a eseguire i propri test.

php 5.4.3

OOP ha più meriti rispetto ai suoi de-meriti. See OOP di PHP, quali sono i vantaggi? . Vedi anche Per OOP vs PP in PHP .

Sì, come l'applicazione cresce .. (e sarà) che vi farà risparmiare molte ore di frustrazione. E ripetendo se stessi (la copia di incollare il codice in tutto il luogo) ..:)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top