假设我的类有一些采用true / false值的方法。例如:
class MyClass
{
public function hasSomething($value)
{
$something = $value;
}
}
$ $可以是真/假。如果我在代码中的某处调用它,那就不是很好了:
$MyClass->hasSomething(true);
从方法名称和值true可能有点难以确定代码正在做什么。所以我喜欢使用常量来使它更好。
我一直在这样做:
abstract class MY_CLASS_CONSTANTS
{
const HAS_THING_ONE = true;
const NO_THING_ONE = false;
}
现在,当我致电MyClass->hasSomething
时,我可以转到MyClass->hasSomething(MY_CLASS_CONSTANTS::HAS_THING_ONE)
,表达性更强,并且应该让代码更容易理解。
我喜欢将const放在一个类中的想法,因为那些consts应该与之一起使用变得更加明显。
这是个坏主意吗?有没有更好的方法呢?其他人如何处理这个?
答案 0 :(得分:1)
为什么不创建一个更简洁,更明确的方法:
MyClass->hasOneThing();
MyClass->hasNothing();
在你的课堂上,你可以自由委派:
class MyClass
{
private function hasSomething($value) {$something = $value;}
public function hasOneThing() {$this->hasSomething(true);}
public function hasNothing() {$this->hasSomething(false);}
}
我不使用常数;如果那个小案例,特别是当参数的类型是布尔值时,它们就没用了。
此外,您的方法设计是错误的。如果其名称为has
或is
,则应返回类似布尔值的内容,而不更新该值。
答案 1 :(得分:1)
使用php类常量是个好主意。
我将举一些让你的代码更易理解和可读的例子,
示例1:(在班级内部)
class Exam
{
/**
* available grades
*/
const GRADE_EXCELLENT = 'A';
const GRADE_VERY_GOOD = 'B';
const GRADE_MIN_PASS = 'C';
const GRADE_CLOSE_FAIL = 'D';
const GRADE_FAIL = 'E';
private $finalGrade;
/**
* one of const - Exam::GRADE_...
*
* @param char $grade
*/
public function setGrade($grade)
{
$this->finalGrade = $grade;
}
}
$exam = new Exam();
$exam->setGrade(Exam::GRADE_VERY_GOOD);
示例2:(具有单独的课程)
class Exam_Grades
{
/**
* available grades
*/
const EXCELLENT = 'A';
const VERY_GOOD = 'B';
const MIN_PASS = 'C';
const CLOSE_FAIL = 'D';
const FAIL = 'E';
}
$exam->setGrade(Exam_Grades::FAIL);
示例3:(定义常量)
define('EXAM_GRADE_EXCELLENT', 'A');
define('EXAM_GRADE_VERY_GOOD', 'B');
define('EXAM_GRADE_MIN_PASS', 'C');
define('EXAM_GRADE_CLOSE_FAIL', 'D');
define('EXAM_GRADE_FAIL', 'E');
$exam->setGrade(EXAM_GRADE_MIN_PASS);
这种方式也可以使用代码完成,这是使用常量的好习惯。
大多数情况下我更喜欢第一个示例风格,对我来说它确实更有意义,它是你的选择,为你做更好的事情......