PHP - 将类的变量传递给另一个类

时间:2017-09-13 09:31:56

标签: php json oop

我有一个返回$values变量的类(在Request()类中定义),我在php文件中调用了这两个:

$requestImport = new Request();
$requestImport->request();
$import = new Import($dbh, $values);
$import->import();

它给了我这个错误:Undefined variable: values。这是我得到$values变量的地方(忽略了上面和下面的行,因为它有点长):

$importData = json_decode($contentResult);
foreach ($importData as $value) {
    $filter = [];
    $filter['CategoryName'] = $value->CategoryName;
    $filter['CategoryId'] = $value->CategoryId;
    $values[] = $filter;
}
return json_encode($values);

如果有帮助,这是Import类中的构造函数:

public function __construct($dbh, $values) {
    $this->dbh = $dbh;
}

我在foreach循环中使用$values,如下所示:

public function import() {
    foreach ($values as $insertData) {
        $this->values['categoryName'] = $categoryName;
        $this->values['categoryId'] = $categoryId;

        $stmt = $this->dbh->prepare("INSERT INTO t_virtuemart_categories_en_gb (
        category_name, id)
        VALUES
        (:categoryName, :categoryId)
        ;");
        $stmt->bindParam(":categoryName", $categoryName);
        $stmt->bindParam(":categoryId", $categoryId);

        $stmt->execute();

    }
}

我不知道这是否是最好的方法($values是一个json字符串,用于将内容插入到数据库中)任何改进它的建议也会有所帮助。如果您需要任何其他信息,我会添加它。

2 个答案:

答案 0 :(得分:1)

您没有从正在调用该类的文件中定义$values

在你的循环中,$values正在内部定义。这意味着它超出了代码中的任何其他位置。

$importData = json_decode($contentResult);
foreach ($importData as $value) {
    $filter = [];
    $filter['CategoryName'] = $value->CategoryName;
    $filter['CategoryId'] = $value->CategoryId;
    $values[] = $filter;
}
return json_encode($values);

您需要通过在循环外定义$values来解决此问题。

$values = array();
$importData = json_decode($contentResult);
foreach ($importData as $value) {
    $filter = [];
    $filter['CategoryName'] = $value->CategoryName;
    $filter['CategoryId'] = $value->CategoryId;
    $values[] = $filter;
}
return json_encode($values);

您还需要在构造函数中使用$this使其成为类级变量。

public function __construct($dbh, $values) {
    $this->dbh = $dbh;
    $this->values = $values;
}

然后从import()函数访问它。

public function import() {
    foreach ($this->values as $insertData) {
        $this->values['categoryName'] = $categoryName;
        $this->values['categoryId'] = $categoryId;

        $stmt = $this->dbh->prepare("INSERT INTO t_virtuemart_categories_en_gb (
        category_name, id)
        VALUES
        (:categoryName, :categoryId)
        ;");
        $stmt->bindParam(":categoryName", $categoryName);
        $stmt->bindParam(":categoryId", $categoryId);

        $stmt->execute();

    }
}

答案 1 :(得分:1)

除了Lars Petersons回答:

变量$ values必须在调用这两个类的php文件中定义:

$requestImport = new Request();
$values = $requestImport->request();
$import = new Import($dbh, $values);
$import->import();

注意,你的导入函数有很多错误,比如$ categoryName和-id。

的声明
public function import() {
    foreach($this->values as $insertData){
        $categoryName = $insertData['categoryName'];
        $categoryId = $insertData['categoryId'];
        ...

编辑:在我更好地了解操作系统想要实现的目标之后我改变了我的答案