为什么我的基本php类在实例化时期望参数?

Ros*_*oss 3 php class

MyClass的(123); ?>

这有效,但返回此警告:

Warning: Missing argument 1 for myClass::myClass()
Run Code Online (Sandbox Code Playgroud)

我读到了这个,似乎构造函数期望一个值,所以通过添加:

function myClass($input='')
Run Code Online (Sandbox Code Playgroud)

警告被删除,但这似乎是不必要的?

有人可以告诉我为什么需要定义一个值来防止这种警告?

谢谢你的任何指示

Pek*_*ica 5

您正在使用与该类同名的方法(对象中的函数称为方法).这被称为构造函数,它在OOP中具有特殊含义.

永远不会单独调用构造函数,而是在初始化对象时自动调用的方法.方法具有的任何参数,您附加到new classname语句.

$test = new myClass(123);
Run Code Online (Sandbox Code Playgroud)

此外,构造函数必须永远不会返回值.它仅用于在初始化类时执行操作,例如存储参数.任何返回值将会丢失,作为结果的new myClass总是初始化对象.

如果您只是想在类中创建一个方法来返回一些文本,那么您需要更改方法的名称.这可行:

<?php
class myClass {
 var $input;
 var $output;

 function someOtherFunctionName($input) {
  $output = 'You entered: ' . $input;
  return $output;
 }
}

$test = new myClass;
echo $test->someOtherFunctionName(123);

?>
Run Code Online (Sandbox Code Playgroud)

如果构造函数确实是您想要使用的,那么请注意,从PHP 5开始,标准做法是使用__construct()而不是创建与类同名的方法:

<?php
class myClass {
 var $input;
 var $output;

 function __construct($input) {
  $this->input = $input;  // This is a valid thing to do in a constructor
 }
}
Run Code Online (Sandbox Code Playgroud)

有关PHP 5中的构造函数和析构函数的更多信息,请参见手册.