Ho solo lasciato correre il cervello e i risultati sono di nuovo caotici. Mi preoccupa il modo in cui, nelle basi, la programmazione stessa può essere piuttosto ridondante.
Diamo un'occhiata a questo frammento di codice e analizziamo cosa fa
public function __construct($data = array(), $strict = false, $prefix = null) {
if (!$data) {
return;
}
foreach ($data as $key => $val) {
if ($prefix) {
if (($pos = strpos($key, $prefix)) === 0) {
$key = substr($key, 0, $pos);
} else {
continue;
}
}
if ($strict === false || property_exists($this, $key)) {
$this->$key = $val;
}
}
}
Quando costruisci questo oggetto possiamo fornire una matrice per riempire le sue proprietà, tuttavia possiamo fare un po 'di filtraggio. Se abilitiamo il parametro strict, riempiremo solo le chiavi che ha già, e se forniamo un parametro prefisso esso riempirà solo proprietà che corrispondono a chiavi che iniziano con un certo prefisso.
Vedi, tuttavia, che abbiamo n * 2 istruzioni if valutate nel ciclo dato come minimo. Se avremo 100 elementi nell'array $data
ci saranno almeno 200 if-statements valutate. Non sarebbe meglio se potessimo ridurlo?
public function __construct($data = array(), $strict = false, $prefix = null) {
if (!$data) {
return;
}
if ($strict === false) {
if ($prefix) {
foreach ($data as $key => $val) {
if (($pos = strpos($key, $prefix)) === 0) {
$this->{substr($key, 0, $pos)} = $val;
}
}
} else {
foreach ($data as $key => $val) {
$this->$key = $val;
}
}
} else {
if ($prefix) {
foreach ($data as $key => $val) {
if (property_exists($this, $key) && ($pos = strpos($key, $prefix)) === 0) {
$this->{substr($key, 0, $pos)} = $val;
}
}
} else {
foreach ($data as $key => $val) {
if (property_exists($this, $key)) {
$this->$key = $val;
}
}
}
}
}
Come possiamo vedere chiaramente, la leggibilità è andata a rotoli ma tuttavia abbiamo ridotto la quantità di espressioni valutate da 200 a 2 nel migliore dei casi quando $strict === false
e prefix === null
- che è un aumento del 99% in termini di efficienza, in teoria.
Per lo più tutto ciò che ho detto fino ad ora è teorico, quindi la domanda è - C'è qualche beneficio effettivo nell'esempio 2 contrario all'esempio 1 riguardante l'esecuzione del programma?
Dato che non mi sono laureato in informatica non ho familiarità con gli interni di programmazione (e php) e come il codice viene valutato ed eseguito ad un livello più profondo, ma ho letto questo e quello su come i processori possono ridimensionare i collegamenti dichiarazioni if, ma come ho detto, non sono così familiare a rispondere alla domanda da solo.