【问题标题】:PHP: $myObject = new ClassName(); vs newClassName;PHP: $myObject = new ClassName();与新类名;
【发布时间】:2011-09-13 15:15:06
【问题描述】:

所以,我知道有时人们在将类的实例声明为对象时会使用括号,有时则不会。

如果我声明一个没有参数的类,然后将其扩展为有参数,那么初始类是否需要有括号?

此外,我可以有一个带括号的类,并且没有像这样的特定参数或引用变量声明:

$myObject = 克隆类名();

然后使用类的参数......

类用户($param, $param2)

或者类甚至使用过参数吗?我不太确定,因为在我的书中没有一个带参数的类的例子......

【问题讨论】:

    标签: php class variables parameters arguments


    【解决方案1】:

    首先,我假设您的意思是 new 而不是 clone。 PHP 在创建类时不需要使用括号。

    class Foo { }
    
    $foo = new Foo;
    $foo = new Foo();
    

    两者都有效。

    您发送的任何参数都将传递给__construct 函数。创建对象时会自动调用该函数(如果存在)。

    class Foo
    {
      public function __construct($n)
      {
         echo "Hello, $n\n";
      }
    }
    
    $foo = new Foo("World!");
    

    这将输出:

    Hello, World!
    

    如果构造函数接受参数,那么如果你不发送任何参数就是一个错误(警告)。

    注意__construct 不需要有参数。有一个没有任何参数的简单地做某事的构造函数是有效的。

    【讨论】:

    • 我只是想知道为什么有时使用参数调用类的实例。我猜如果构造函数有参数,你可以用它们调用对象....
    • 如果构造函数有非可选参数,那么你必须在创建对象时传递它们。
    • @Matthew 除了将参数传递给构造函数之外,$foo = new Foo;$foo = new Foo(); 有什么区别?
    【解决方案2】:

    那些参数,例如

    $myObject = new ClassAwesome($param1, $param2);
    

    不对应类声明,它们与构造函数有关。一个例子:

    //this is how you declare a class, there will not be a parenthesis here
    class ClassAwesome {
    
        //here is where the parameters are used when you instantiate a class
        public function __construct($param1, $param2) {
            //init code goes here
        }
    }
    

    所以基本上你看不到带参数的类声明的原因是因为它们不存在,类构造函数是参数所在的地方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-20
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多