Vorrei sapere se è accettabile/preferibile utilizzare self :: method() e parent :: method() quando si lavora nelle classi php.
È possibile utilizzare $ this-> method() ma $ this-> può anche fare riferimento a una variabile di classe, a una variabile di classe parent o a un metodo della classe padre. Non c'è alcuna ambiguità in se stessi ::
È self :: deprezzato e/o ci sono avvertimenti o contro usare questo stile?
Comprendo che self :: e parent :: si riferiscono a un'istanza statica della classe, ma in kohana, a meno che non si definisca specificamente un metodo come statico, non sembra esserci differenza.
Grazie.
Aggiunto un esempio: Assumendo questa applicazione memorizza forum da più siti web ...
class Forum_Controller extends Controller {
function __construct()
{
parent::__construct();
}
function index()
{
echo self::categories();
}
/*
* get a list of categories from a specific site.
*/
private function categories()
{
$db = new Database;
$categories = $db->query("
SELECT * FROM
forum_categories
WHERE fk_site = '$this->site_id'
");
$view = new View('categories_view');
$view->categories = $categories;
return $view;
}
}
Questo esempio funziona in kohana con segnalazione degli errori impostato: error_reporting (E_ALL & ~ E_STRICT);
$ this-> site_id è definito nella classe Controller_Core principale (una libreria in kohana).
Per quanto ne so, $ non dovrebbe essere disponibile poiché sto chiamando self :: categories() in modo statico, ma è solo quando definisco le categorie() come statico che genera un errore .
Ma come ho detto preferisco di gran lunga usare l'auto: perché da una prospettiva di leggibilità, so esattamente dove dovrebbe essere questa funzione, piuttosto che usare $ ciò che causa ambiguità, per me è così.
Il motivo per cui questo codice funziona è perché non si è mai riferimento a un $ tale istanza dell'oggetto nella chiamata staticamente metodo di categorie. – null