是/为什么php会强制您使用对象构造函数

时间:2015-05-27 14:12:02

标签: php oop object server

我一直在研究PHP中的对象。我见过的所有例子都使用了对象构造函数甚至是他们自己的对象。 PHP是否强迫您这样做,如果是这样,为什么?

例如:

<?php
    class Person {
    public $isAlive = true;
    public $firstname;
    public $lastname;
    public $age;

    public function __construct($firstname, $lastname, $age) {
      $this->firstname = $firstname;
      $this->lastname = $lastname;
      $this->age = $age;
    }

    public function greet() {
      return "Hello, my name is " . $this->firstname . " " . $this->lastname . ". Nice to meet you! :-)";
       }
    }

    // Creating a new person called "boring 12345", who is 12345 years old ;-)
    $me = new Person('boring', '12345', 12345);

    echo $me->greet(); 
    ?>

但如果我这样做:

<?php
class Person {
    public $isAlive = true;
    public $firstname;
    public $lastname;
    public $age;
}
$person->firstname = "John";
echo $person->firstname;
?>

我收到一个http错误代码500.(即:我的代码崩溃了。)

3 个答案:

答案 0 :(得分:3)

您错误地将__construct()函数与实例化类/对象的方式相关联。

使用__construct()功能(可选)。但是,在使用类的方法之前, do 必须首先创建它的实例。

<?php
class Person {
    public $isAlive = true;
    public $firstname;
    public $lastname;
    public $age;
}
$person = new Person(); //Add this line
$person->firstname = "John";
echo $person->firstname;
?>

答案 1 :(得分:3)

因为类定义就是定义。

要创建类的实例(实际对象),必须实例化它。实际上,您可以实例化同一类的许多不同对象/实例。

您不必定义构造函数方法.....但您必须使用new

进行实例化

答案 2 :(得分:2)

有两种方法可以处理类变量。 1.变量应该是公共静态,如:

class Person {
    public $isAlive = true;
    public static $firstname;
    public $lastname;
    public $age;
}
Person::$firstname = "John";
echo Person::$firstname;

2。通过类对象访问变量

class Person {
    public $isAlive = true;
    public $firstname;
    public $lastname;
    public $age;
}
$person->firstname = "John";
echo $person->firstname;

顺便说一句,PHP至少可以自己创建php 5.5对象。 您的代码没有崩溃。它只是给出一个警告: 警告:在...中创建空值的默认对象

那么为什么? 这就是PHP如何使用内存。在第一种情况下,静态意味着php已经为变量分配了内存,您可以使用它。第二种情况。通过使用NEW命令,您可以指示php分配内存并将类加载到其中。因此,在创建类之后,您可以访问var。

在第三种情况下,PHP自己调用 new Person 并给出警告。我强烈建议不要指望php默认行为。总是以明确的方式创建一个对象