3

PHPで静的クラスを拡張しようとしています。私が実行しているのは、拡張クラスの 1 つで変数を変更すると、他のすべてのクラスも変更されるということです。これは私がやろうとしていることです:

class Fruit{
    private static $name = Null;
    public static function setName($name){
        self::$name = $name;
        }
    public static function getName(){
        return self::$name;
        }
    } 

class Apple extends Fruit{};
class Banana extends Fruit{};

Apple::setName("apple");
Banana::setName("Banana");

echo Apple::getName();
echo Banana::getName();

遅延静的バインディングとキーワード static:: について読みました。しかし、Apple と Banana の両方で Fruit のすべてのメソッドを再宣言することなく、これを達成する方法を思いつきません。

喜んでお手伝いします

ありがとうございました

4

2 に答える 2

4

これは機能します:

<?php

class Fruit{
    protected static $name = Null;
    public static function setName($name){
        static::$name = $name;
        }
    public static function getName(){
        return static::$name;
        }
    } 

class Apple extends Fruit{protected static $name;};
class Banana extends Fruit{protected static $name;};

Apple::setName("apple");
Banana::setName("Banana");

echo Apple::getName();
echo Banana::getName();

残念ながら、特化したい静的プロパティを再宣言する必要がありますが、後半の静的バインディングの直感は正しかったです:)

于 2014-04-05T21:02:31.487 に答える