[Risolto] [PHP] accesso array statico in ereditartieta dal p

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

[Risolto] [PHP] accesso array statico in ereditartieta dal p

Messaggio da SuperStep »

salve, ho due classi,

la prima rappresenta un modello del sistema, e' astratto, serve ad estendere tutti gli altri:

Codice: Seleziona tutto

abstract class Model {
    public static $fields = [];
    public $fillable = [];
    public $guarded = [];

    public final function missedFields() {
        //array_merge_unique e' una funziona che combina array merge ed array unique ridistribuendo le chiavi da capo nell'ordine in cui fa il merge
        $declaredFields = array_merge_unique($this->fillable, $this->guarded); 

        $misseds = array_diff(self::$fields, $declaredfields);

        ... etc ...
    }
}
ed una classe in particolare (User)

Codice: Seleziona tutto

class User extends Model {
    public static $fields = ['id','username','password'];
    public $fillable = ['username','password'];
    public $guarded = ['id'];
}
adesso se provo ad invocare da un oggetto User il metodo missedFields(), quello che mi succede e' che self::$fields rispecchia quello del padre, ovvero

Codice: Seleziona tutto

array(0) {
}
se utilizzo $this->fields ottengo NULL.

come posso far riferimento ad un valore statico dalla classe padre nella classe figlio? (Model e' astratta e missedFields non e' statico quindi non c'e' pericolo che venga invocato).

il motivo per cui $fields e' statico e che i campi nel database sono sempre gli stessi.
Ultima modifica di SuperStep il domenica 21 giugno 2015, 15:33, modificato 1 volta in totale.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [PHP] accesso array statico in ereditartieta dal padre

Messaggio da Zoff »

SuperStep [url=http://forum.ubuntu-it.org/viewtopic.php?p=4771785#p4771785][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto: come posso far riferimento ad un valore statico dalla classe padre nella classe figlio? (Model e' astratta e missedFields non e' statico quindi non c'e' pericolo che venga invocato).
Non è possibile, al massimo puoi mettere un metodo statico astratto che il figlio deve implementare per restituire i campi.

Codice: Seleziona tutto

<?php


abstract class A {
    abstract static function getFields();
    
    public function work(){
		$fields = static::getFields();
		echo "I'm doing something with ".implode($fields,', ').PHP_EOL;
	}	
}

class B extends A {
	public static function getFields(){
		return ['a','b','c'];
	}
}

class C extends A {
	public static function getFields(){
		return ['d','e','f'];
	}
}

$b = new B;
$b->work();

$c = new C;
$c->work();
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: [PHP] accesso array statico in ereditartieta dal padre

Messaggio da SuperStep »

ho risolto dichiarandoli non statici.
Ultima modifica di SuperStep il domenica 21 giugno 2015, 20:17, modificato 1 volta in totale.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: [Risolto] [PHP] accesso array statico in ereditartieta d

Messaggio da SuperStep »

ho trovato il modo che cercavo. da php 5.3.x il l'operatore static:: fa riferimento agli attributi nel figlio dalla classe padre. Esempio banale:

Codice: Seleziona tutto

step@Mike:~$ php -a
Interactive mode enabled

php > class A {
php { protected static $fields = [];
php { public function echoFields(){
php { foreach(static::$fields as $field) echo $field;
php { }
php { }
php > class B extends A {
php { protected static $fields = ['a','b','c'];
php { }
php > B::echoFields();
abc
php > 
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 6 ospiti