2014-10-11 1 views
-1

базовый класс:Что лучше, делайте это с помощью констант или методов? (Наследование, статические, Php, или любой ООП)

abstract class Base 
{ 
    abstract public function getLenth(); 
    abstract public function getName(); 
} 

два класса из него:

final class ObjA extends Base 
{ 
    public function getLenth() 
    { 
     return 1; 
    } 

    public function getName() 
    { 
     return 'Object A'; 
    } 
} 

.

final class ObjB extends Base 
{ 
    public function getLenth() 
    { 
     return 6; 
    } 

    public function getName() 
    { 
     return 'Object B'; 
    } 
} 

это - одно решение. Его можно переписать следующим образом:

class Base 
{ 
    public function getLenth() 
    { 
     return static::LENGTH; 
    } 

    public function getName() 
    { 
     return static::NAME; 
    } 
} 

.

final class ObjA extends Base 
{ 
    const LENGTH = 1; 
    const NAME = 'Object A'; 
} 

.

final class ObjB extends Base 
{ 
    const LENGTH = 6; 
    const NAME = 'Object B'; 
} 

какая версия лучше, почему?

EDIT:

Я голосую за 2: короче. Но его интересно, что, как это могло быть сделано с Java, где нет позднего статического связывания для постоянных

+2

«Лучше» всегда связано с контекстом. Если вы можете использовать одну версию очень хорошо (потому что вы можете реализовать константы без проблем), почему бы не сделать это? Но будут ли все ваши реализации «ObjA» иметь одинаковую длину и имя? Проанализируйте ситуацию самостоятельно, и вы можете сказать себе, что лучше для вас и почему – kero

+0

да, они все константы, никогда не будут изменены –

ответ

1
class Base 
    { 
     private String _name; 

     private int _length; 

     Base(int length, int name) 
     { 
      _length = length; 
      _name = name; 
     } 

     public function getLenth() 
     { 
      return _length; 
     } 

     public function getName() 
     { 
      return _name; 
     } 
    } 

    class ObjA extends Base 
    { 
     public ObjA() 
     { 
      Base(1, 'Object A'); 
     } 
    } 

Я считаю, что это лучшее решение

Edit: Позвольте мне пояснить, почему при более простом примере :

class Vehicle 
{ 
    private int _wheels; 

    Vehicle(int wheels) 
    { 
     _wheels = wheels; 
    } 
} 

class Corvette extends Vehicle 
{ 
    Corvette() 
    { 
     Vehicle(4); 
    } 
} 

Corvette всегда имеет четыре колеса, но было бы неуместно делать из него постоянное. Это свойство, которое разделяется между этими видами объектов (= транспортные средства).

+0

длина и имя - константы, они никогда не меняются. –

+0

То, что они постоянны, не имеет значения, на мой взгляд. Представьте себе автомобиль, который наследуется от транспортного средства, и велосипед, который наследуется от транспортного средства. У обоих не было бы постоянной с числом колес. –

Смежные вопросы