工作中的PHP编码标准:疯狂,还是我?
我更喜欢符合逻辑的编码标准。这就是为什么以下标准不适用的原因。工作中的PHP编码标准:疯狂,还是我?,php,oop,naming-conventions,coding-style,Php,Oop,Naming Conventions,Coding Style,我更喜欢符合逻辑的编码标准。这就是为什么以下标准不适用的原因。 我需要知道两件事中的一件:(1)为什么我错了,或者(2)如何说服我的团队改变它们 camelCase:函数、类名、方法和变量必须是camelCase。 很难区分变量和类 与PHP的小写/下划线变量/函数和大写类相反 例如: $customerServiceBillingInstance = new customerServiceBillingInstance(); // theirs $customer_service_bi
我需要知道两件事中的一件:(1)为什么我错了,或者(2)如何说服我的团队改变它们
camelCase:函数、类名、方法和变量必须是camelCase。
- 很难区分变量和类
- 与PHP的小写/下划线变量/函数和大写类相反
$customerServiceBillingInstance = new customerServiceBillingInstance(); // theirs
$customer_service_billing_instance = new CustomerServiceBillingInstance();
函数/方法必须始终返回值(并且必须始终存储返回的值)。 这出现在我们的数百个php页面上:
$equipmentList = new equipmentList();
$success = $equipmentList->loadFromDatabase(true, '');
$success = $equipmentList->setCustomerList();
$success = $equipmentList->setServerList();
$success = $equipmentList->setObjectList();
$success = $equipmentList->setOwnerList();
$success = $equipmentList->setAccessList();
返回值很少使用,但始终存储。它鼓励使用复制和粘贴
无静态方法 类似以下的行在代码库中出现了数千次:
$equipmentList = new equipmentList();
$success = $equipmentList->loadFromDatabase();
我希望:
$equipmentList = equipmentList::load();
为什么不使用静态方法或属性?静态方法不负责非实例特定的逻辑吗?比如初始化或填充新实例
除非所有内容都返回一个对象,否则代码不是OOP 有一段代码执行查询,以多种方式检查错误,然后处理生成的数组。它被重复(复制+粘贴)好几次,所以我把它放在基类中。然后我被告知返回数组不是OOP
你如何为这些做法辩护?我真的需要知道。我觉得我在吃疯狂的药片 如果你不能为他们辩护,你如何说服坚定的作者他们需要改变 如果你不能保护他们,你怎么办 说服他们需要的坚定的作者 需要改变吗 通过给出有力/有效的论据!不过,我认为只有当你的论点非常有力时,你才应该改变它们!因为工作中的大多数程序员都习惯于这些编码标准,这就是为什么要使用它们的一个重要原因 == 就像前面提到的其他人一样,这是相当主观的,但这些是我的观点/论点 1。camelCase:函数、类名、方法和变量必须是camelCase。 如果我用PHP编写代码,我会使用PHP样式,如果我用Java编写代码,我会使用Camelcase样式。但只要你保持一致,你选择哪种风格并不重要 2。函数/方法必须始终返回值(并且必须始终存储返回的值)。 我认为这是胡说八道。在几乎所有的编程语言中,都有某种“void”类型。但是从测试的角度来看,如果你的函数没有副作用,那么大多数时候它是有用的。我不同意您的生产代码应该总是使用返回值,特别是如果它没有任何用处的话 3。没有静态方法 我建议你读米斯科的书 在实例化过程中,我连接 与mock/friends的依赖关系 它取代了真正的依赖关系。 有了过程编程,就有了 无需“连线”,因为没有 对象、代码和数据 分开 虽然PHP是一种动态语言,所以它并不是一个大问题。尽管如此,最新的PHP仍然支持类型化,所以我仍然认为大多数时候静态方法是不好的 4。除非所有内容都返回一个对象,否则代码不是OOP
我相信(不是100%确定)真正的OOP语言应该做到这一点(返回一个对象),但我不同意像Java这样的类似语言(我认为这不是真正的OOP)。很多时候,您的方法应该只返回String/Int/Array/等原语。当您复制和粘贴大量代码时,这应该表明您的设计不完全正确。你应该重构它(但是首先准备好一个测试(TDD),这样你就不会破坏任何代码)。
许多编码标准是非常主观的,但是要考虑的一些重要的事情是:
class CustomerServiceBillingInstance
{
// Your class code here
}
$v = mySubroutine(arg); // subroutine should never have a return value!
myFunction(arg); // there is no point calling side-effect free function and ignoring its return value
我通常认为变量和函数应该是驼峰式的
因此,根据您对下划线的偏好,可以选择其中一种:
$customerServiceBillingInstance = whatever;
$customer_service_billing_instance = whatever;
2。函数/方法必须始终返回值(并且必须始终存储返回的值)。
这一个看起来像是额外的代码,你可能最终会使用额外的资源。如果函数不需要返回任何内容,则不要返回任何内容。同样,如果您不关心函数返回的内容,请不要存储它。使用额外的内存来存储你永远不会看到的东西是没有意义的。return new Boolean(false); // This would use up unnecessary resources but not add very much to readability or maintainability in my opinion.
$value = new functionName();
$value = new local_variable();
$value = new GLOBAL_VARIABLE();
$value = new MyClass(); // correct
$value = $inst->ClassName();
$value = $inst->instance_variable();
$value = $GLOBAL_VARIABLE();
$GLOBAL = $value;
$someFunction = $anotherFunction;
mySubroutine(arg); // subroutine, no need to check return value
$v = myFunction(arg); // return value is stored
if (myFunction(arg)) { ... } // return value used immediately
$v = mySubroutine(arg); // subroutine should never have a return value!
myFunction(arg); // there is no point calling side-effect free function and ignoring its return value