我试图理解对象&类。但我遇到了问题。我试图将一个变量从一个类传递到另一个类。
为什么我这样做主要是因为我想了解更多类如何工作,以及将来我需要将数据库连接发送到类中。
以下是针对该问题简化的代码:
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";
为什么这不起作用?
答案 0 :(得分:1)
您正在调用databaseConnection::connect()
作为静态方法。将其修改为:
public static function connect(){ }
编辑 - 正如@Shankar Damodaran指出的那样,还补充道:
public function addLike()
{
return $this->database;
}
答案 1 :(得分:1)
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;
}
答案 2 :(得分:1)
首先,您应该遵循约定并开始命名类StartingWithCapitalLetter。
其次,“::”运算符用于调用静态方法(简单地说 - 你不必创建类的对象来调用它们,如果它们是公共的)。
通常,要调用object的方法,请使用运算符“ - >”,如$ 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();
另外,正如deceze指出的那样,你需要使用$ this访问类变量而不是访问本地方法变量:
public function addLike()
{
return $this->database;
}
答案 3 :(得分:0)
public function addLike()
{
return $this->database;
}
答案 4 :(得分:0)
$database
和$this->database
是两个不同的变量。 $database
是一个本地函数变量,它不存在,它不是您之前设置的对象属性。