我一直在研究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.(即:我的代码崩溃了。)
答案 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默认行为。总是以明确的方式创建一个对象