Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 45
  1. #1

    [PHP5] anomalia dei metodi statici - BUG ?

    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?
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  2. #2
    dato che con le variabili statiche questo non accade spero non mi rispondano sia un comportamento normale ... perchè di normale e logico ha ben poco.
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  3. #3
    sicuramente per un discorso di compatibilità con PHP4 c'è questo discorso
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  4. #4
    sicuramente per un discorso di compatibilità con PHP4 c'è questo discorso
    ma in questo caso E_STRICT non dovrebbe segnalare qualcosa?

  5. #5
    Originariamente inviato da daniele_dll
    sicuramente per un discorso di compatibilità con PHP4 c'è questo discorso
    e che due bolas sto php 4 del menga ...



    pre chi fosse interessato (e votate errore grave, grazie )
    http://bugs.php.net/bug.php?id=40886




    Originariamente inviato da matteolandi
    ma in questo caso E_STRICT non dovrebbe segnalare qualcosa?
    spe che controllo ... ero su PAMPA E_ALL

    [edit]
    non segnala nemmeno mezza bertuccia ... E_ALL | E_STRICT ...
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  6. #6
    Io il C# non lo conosco ma in C++ questo codice funge:
    codice:
    #include <iostream>
    using std::cout;
    using std::endl;
    
    class ExampleClass{
    	public:
    	static void StaticExample()
    	{
    		cout<<"StaticExample"<<endl;
    	}
    
    	void InstanceExample()
    	{
    		cout<<"InstanceExample"<<endl;
    	}
    };
    
    int main()
    {
    	ExampleClass::StaticExample();
    	ExampleClass test;
    	test.InstanceExample();
    	test.StaticExample();
    	return 0;
    }
    forse ho capito male quello che andr3a voleva dire...
    Dolcissima è la vita nella totale assenza di senno.

  7. #7
    Originariamente inviato da 69-KaMa-69
    forse ho capito male quello che andr3a voleva dire...
    hai capito alla perfezione ... ma se mi rispondono che PHP 5 prende la OO da C++ gli sparo


    puoi confermarmi funzioni anche con variabili statiche oltre che con metodi statici?

    se si: comunque hanno cannato in php
    se no: che nel manuale scrivano che PHP 5 prende la OO dal vecchio (ma buono) C++

    [edit]
    che poi a ripensarci in C++ il comportamento è sensato ... perchè se non scrivi static non puoi fare ExampleClass.StaticExample

    in PHP 5 , in questo modo, il tipo di metodo static perde completamente di significato perchè per retrocopatibilità, come dice daniele, ExampleClass::StaticExample si può sempre usare anche se il metodo non è stato dichiarato statico ... (ma in questo caso almeno E_STRICT qualcosa dice ... Strict Standards: Non-static method ExampleClass::InstanceExample should not be called statically)
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  8. #8
    L'OOP in php sembra un po' fatto "all'ammuzzu"* (come si dice dalle mie parti) comunque si, in C++ funziona anche con le variabili statiche.



    * traduzione: a casaccio
    Dolcissima è la vita nella totale assenza di senno.

  9. #9
    Originariamente inviato da 69-KaMa-69
    L'OOP in php sembra un po' fatto "all'ammuzzu"* (come si dice dalle mie parti) comunque si, in C++ funziona anche con le variabili statiche.
    e allora vedi che comunque la metti in PHP hanno cannato (o come dici tu hanno fatto all'ammuzzu)
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  10. #10
    La logica sfugge anche a me, ma comunque il comportamento da te evidenziato non mi sembra in contrasto con quanto scritto qui

    http://www.php.net/manual/en/language.oop5.static.php

    Per cui ti risponderanno che non è un bug
    Addio Aldo, amico mio... [03/12/70 - 16/08/03]

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.