类不打印变量


Class not printing variable

我试图理解对象&类。但是我有个问题。我试图传递一个变量从一个类到另一个类。

为什么我这样做主要是因为我想了解更多的类是如何工作的,但也为未来我需要发送数据库连接到类。

下面是我针对这个问题简化的代码:

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是一个不存在的局部函数变量,它不是你之前设置的对象属性。