Tutto orgoglione di aver trovato un modo per fare override di un metodo statico di una qualsiasi classe in PHP, sono incappato in un orrore logico non da poco ... e vorrei chiedervi un'opinione in merito.
Un metodo statico è per definizione raggiungibile (utilizzabile) tramiteil nome della classe.
Un metodo statico a sua volta non può sfruttare un referente $this poichè non essendo parte dell'istanza ma della classe non ha alcuna istanza di riferimento (il $this, per l'appunto).
Ora, osservate questo codice
codice:
class ExampleClass {
public static function StaticExample(){
echo "StaticExample", "
";
}
public function InstanceExample(){
echo "InstanceExample", "
";
}
}
$test = new ExampleClass();
ExampleClass::StaticExample();
$test->InstanceExample();
$test->StaticExample();
exit();
Il risultato prodotto è questo
codice:
StaticExample
InstanceExample
StaticExample
... ma cosa diavolo ci fa quel metodo nella mia istanza?
Forte della mia certezza, vado a fare un paragone con C# (Console Application)
codice:
using System;
namespace ConsoleApplication1 {
public class ExampleClass {
public static void StaticExample() {
Console.WriteLine("StaticExample");
}
public void InstanceExample() {
Console.WriteLine("InstanceExample");
}
}
class Program {
static void Main(string[] args) {
ExampleClass test = new ExampleClass();
ExampleClass.StaticExample();
test.InstanceExample();
//test.StaticExample();
Console.ReadLine();
}
}
}
Cioè ... non è nemmeno possibile decommentare quella linea perchè il parser si accorge immediatamente che si è commesso un errore ... qualcuno ha dei lumi?