2017-09-13 229 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

相關問題