我试图理解对象&类。但是我有个问题。我试图传递一个变量从一个类到另一个类。
为什么我这样做主要是因为我想了解更多的类是如何工作的,但也为未来我需要发送数据库连接到类。
下面是我针对这个问题简化的代码:
class databaseConnection
{
public function connect(){
return "localhost";
}
}
class like
{
private $database;
public function __construct(){
$this->database = databaseConnection::connect();
}
public function addLike()
{
return $database;
}
}
$obj = new like;
echo $obj->addLike();
但是这没有显示任何东西。我认为结果将是echo "localhost";
为什么不工作?
connect
不是静态方法,您应该将其更改为静态或创建一个实例。
// if you use databaseConnection::connect();
public static function connect(){
或
$db = new databaseConnection;
$this->database = $db->connect();
你还需要修改
public function addLike()
{
// use $this to access object property
return $this->database;
}
您正在调用databaseConnection::connect()
作为静态方法。修改为:
public static function connect(){ }
编辑-正如@Shankar Damodaran指出的,也添加:
public function addLike()
{
return $this->database;
}
首先你应该真正遵循惯例,开始将类命名为StartingWithCapitalLetter。
其次,"::"操作符用于调用静态方法(简单地说,如果它们是公共的,则不必创建类的对象来调用它们)。
通常,调用对象的方法使用操作符"->",如$object->method(arguments);因此,在您的示例中,您需要首先创建databaseConnection类的对象(因为您不能在未初始化的方法上调用方法),然后对其调用"connect",如下所示:
$connection = new databaseConnection();
$database = $connection->connect();
要传递参数,需要修改方法声明
public function connect($parameter){
return "Connecting to " ... $parameter;
}
并以
命名$database = $connection->connect($parameter);
顺便说一句,在创建类的对象时应该使用括号,比如:
$obj = new like();
echo $obj->addLike();
另外,正如deze指出的,您需要使用$this来访问类变量,而不是访问局部方法变量:
public function addLike()
{
return $this->database;
}
public function addLike()
{
return $this->database;
}
$database
和$this->database
是两个不同的变量。$database
是一个不存在的局部函数变量,它不是你之前设置的对象属性。