Что лучше, сделать это с помощью констант или методов? (Наследование, статический, 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';
}

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

РЕДАКТИРОВАТЬ:

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

-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');
}
}

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

Изменить: позвольте мне объяснить, почему на более простом примере:

class Vehicle
{
private int _wheels;

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

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

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]