Php 为什么有些变量是参数,而另一些则不是';T

Php 为什么有些变量是参数,而另一些则不是';T,php,Php,发生这种情况的原因可能是什么: public function __construct($host, $port, $timeout = 5){ $errnum = 0; $errstr = ''; 与此相反: public function __construct($host, $port, $errnum = 0, $errstr = '', $timeout = 5){ ? 为什么有些是params,有些不是 非常感谢, MEM如果它们是参数,用户可以在创建对象的过程

发生这种情况的原因可能是什么:

public function __construct($host, $port, $timeout = 5){
    $errnum = 0;
    $errstr = ''; 
与此相反:

public function __construct($host, $port, $errnum = 0, $errstr = '', $timeout = 5){
?

为什么有些是params,有些不是

非常感谢,
MEM

如果它们是参数,用户可以在创建对象的过程中传递它们。像这样的电话

$a=新的MyObject($myhost,$myport,40000,'Failed',$mytimeout)


将初始化内存中已存在错误的对象。。。对于错误号或字符串,这是不需要的。用户不能在对象中插入随机错误。

错误由函数设置,在函数定义中传递这些错误是没有意义的。

函数定义定义了函数本身和调用它的代码之间的约定


只有在调用者指定其值时,变量才应该是参数。否则,如果变量仅由函数内部使用,则无需将其指定为参数。

通常,定义函数时,函数只接受运行所需的参数/数据


在您的示例中,
$errnum
$errstr
似乎是函数内部使用的变量。如果您设计该函数,您必须决定是否要给用户覆盖这些函数的可能性。

根据构造函数/类的操作,您可能需要使用3个以上的参数调用构造函数。参数列表不是初始化局部变量的地方。检查正在读取参数的类的API(看起来它们是函数的API,所以请先阅读此文档)。

$timeout是调用函数时可以覆盖的默认参数

调用函数时无法覆盖$errnum和$errstr

注意:

public function goodConstruct($host, $port, $timeout = 5){
    $errnum = 0;
    $errstr = ''; 
}

goodConstruct('hostname',8443,60);
通过这样做,我可以覆盖默认超时

public function badConstruct($host, $port, $errnum = 0, $errstr = '', $timeout = 5)
{

//code
}

badConstruct('hostname',8443,99,'hey look at this silly error!!!!',900);

现在我还可以覆盖错误代码(假设这是errnum的目的,如果这是某种计数器,则更糟糕)和错误字符串。你真的想通过函数调用来控制它吗?可能不是。。。我想你会想把它修好的。

谢谢。我可以问一个相关的问题吗:我经常看到$errnum和$errstr,为什么没有其他名称?非常感谢:)@MEM这些只是惯例。你可以给他们取任何你想要的名字,但是这个名字应该有意义。这些名称可能会出现在php手册的许多示例中。谢谢。我们有一个约定,或者至少我遵循这个什么,也就是说$variablesLikeSo被命名为“低骆驼案例”(我想我们称之为“低骆驼案例”),然后当我经常看到那些变量时,我发现自己陷入了冲突。。。我相信我会改变,我总是很清楚,比如$errorNumber$errorDescription,所以我相信一切都会好的,是吗?再次谢谢你,我明白了。谢谢这是一个极好的附加组件。我没有考虑参数和覆盖之间的关系。很好非常感谢。这是我当时更基本的无知,一种理解这门课如何运作的方式。(这实际上是我在帮助下建立的一个类,所以,这就是这个问题的原因。谢谢。:)1个问题,如果你不介意的话,那么可选参数。。。方法参数是否值得考虑?@MEM:它们可以使用,但只有在它们有意义的情况下才可以使用。再次:如果你不想让用户修改某些东西,不要给他机会。我明白了。。。下一次我会考虑这一点,并尝试理解我给用户的选择是否使用param,最终我可以用另一个结构重新安排,而不是由系统来决定。