2017-09-13 139 views
0

我有一个返回$values变量(在Request()类中定义)的一类,我有这个在调用这两个PHP文件: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; 
} 

我“M在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字符串插入到数据库的东西)任何建议,以改善它也会有所帮助。如果您需要任何其他信息,我会添加它。

+1

你通过它之前你在哪里定义'$ values'?你不能给一个人不存在的东西,那么为什么你应该能够在代码中做到这一点? – Script47

+0

@ Script47在Request类中。我现在就解释它! – Newwt

+0

您没有定义'$ values'。你正试图在'import()'函数中使用这个变量,但它没有被定义。您也将它作为参数发送给construstor,但不做任何事情。 –

回答

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

除了拉斯彼得松斯答案:

变量$值必须在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']; 
     ... 

编辑:以后我更好地理解了什么运想实现我改变我的回答有点

+0

巧合的是,'$ values = $ requestImport-> request();'正是我所改变的,看到我一次不会走错路,真是太棒了,谢谢!我不明白的是为什么现在我得到'为foreach()'提供的无效参数。是因为'$ this-> values'不是一个对象或数组吗? – Newwt

+0

看看Lars在答案中所做的Import-constructor的变化。你需要添加'$ this-> values = $ values;' – Cashbee

+0

哦,等等。实际上它是因为$ this-> values在那个时候被jsondecoded。在导入构造函数解码它。 '$ this-> values = json_decode($ values,true);'。为什么它仍然被jsonencode编码? – Cashbee

相关问题