Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
工作中的PHP编码标准:疯狂,还是我?_Php_Oop_Naming Conventions_Coding Style - Fatal编程技术网

工作中的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),这样你就不会破坏任何代码)。

许多编码标准是非常主观的,但是要考虑的一些重要的事情是:

  • 获取一组代码命名和样式规则,并遵循它们。如果您尚未定义规则,请确保找到规则。然后重构代码以遵循它们。这是一个重要的步骤,以使新开发人员更容易加入,并使开发人员之间的编码保持一致

  • 更改公司制定的编码标准需要时间和精力。对规则的任何更改都意味着必须重新检查代码,以更新所有内容,使其与新标准保持一致

  • 请记住以上内容,并进一步了解特定PHP编码标准。首先要看的是,如果您的公司使用任何类型的框架,请查看该框架的编码标准,因为您可能希望遵守这些标准,以便在所有代码中保持一致。下面我列出了几个流行PHP框架的链接:

  • 我个人对您特定编码风格的偏好:

    1。camelCase:函数、类名、方法和变量必须是camelCase

    类名应为Pascal大小写(大写)

    在你的例子中:

    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