पर तर्क पारित करने के लिए मैंने Google परिणामों के कई पेजों के साथ-साथ यहां स्टैक ओवरफ्लो पर भी खोज की है लेकिन मेरी स्थिति में फिट होने वाला कोई समाधान नहीं मिल रहा है। मेरे पास उस समारोह में एक आखिरी झगड़ा है जो मैं बनाने की कोशिश कर रहा हूं, जो गतिशील रूप से वस्तुओं को बनाने के लिए call_user_func_array का उपयोग करता है।call_user_func_array एक कन्स्ट्रक्टर
मुझे प्राप्त होने वाली आकर्षक घातक त्रुटि Object of class Product could not be converted to string
है। जब त्रुटि होती है, लॉग में मुझे इनमें से पांच मिलते हैं (प्रत्येक तर्क के लिए एक): PHP Warning: Missing argument 1 for Product::__construct(),
पकड़ने योग्य घातक त्रुटि से पहले। अगर मैं call_user_func_array लाइन बाहर टिप्पणी और इस के साथ बदलने, अब
public static function SelectAll($class, $table, $sort_field, $sort_order = "ASC")
{
/* First, the function performs a MySQL query using the provided arguments. */
$query = "SELECT * FROM " .$table. " ORDER BY " .$sort_field. " " .$sort_order;
$result = mysql_query($query);
/* Next, the function dynamically gathers the appropriate number and names of properties. */
$num_fields = mysql_num_fields($result);
for($i=0; $i < ($num_fields); $i++)
{
$fetch = mysql_fetch_field($result, $i);
$properties[$i] = $fetch->name;
}
/* Finally, the function produces and returns an array of constructed objects.*/
while($row = mysql_fetch_assoc($result))
{
for($i=0; $i < ($num_fields); $i++)
{
$args[$i] = $row[$properties[$i]];
}
$array[] = call_user_func_array (new $class, $args);
}
return $array;
}
:
$array[] = new $class($args[0],$args[1],$args[2],$args[3],$args[4]);
एकदम सही ढंग से पेज लोड होता है और भरता है
इस समारोह का कोड है जिस टेबल को मैं बना रहा हूं। तो जब तक मैं वास्तव में सरणी call_user_func_array
के भीतर उपयोग करने का प्रयास नहीं करता तब तक सबकुछ बिल्कुल कार्यात्मक होता है।
क्या उस सरणी को कॉल करने के बारे में कुछ सूक्ष्म विवरण है जो मुझे याद आ रही है? मैंने एक बार call_user_func_array के लिए PHP मैनुअल पढ़ा, और फिर कुछ, और उस पृष्ठ पर उदाहरण लोगों को सिर्फ एक सरणी बनाने और दूसरे तर्क के लिए बुलाते हुए लग रहा था। मुझ से ऐसी कौनसी गलती हो जाएगी?
आपके उत्तर के लिए धन्यवाद, हालांकि, मुझे 'कोई वैध कॉलबैक' त्रुटि नहीं मिल रही है, और त्रुटि लॉग प्रतीत होता है कि 'call_user_func_array' सफलतापूर्वक निर्माण को कॉल करता है, क्योंकि यह मुझे' PHP चेतावनी देता है: विशेष कन्स्ट्रक्टर की अपेक्षा की जा रही पांच तर्कों में से प्रत्येक के लिए उत्पाद :: __ निर्माण() 'के लिए गुम तर्क 1) लेकिन किसी कारण से नहीं प्राप्त करते हुए। बेशक, यह ऐसा कुछ हो सकता है जिसे मैं अभी तक समझ नहीं पा रहा हूं, लेकिन वह ज्ञान है जो मेरे पास है। – tuespetre
आप पहले ऑब्जेक्ट को 'नई $ कक्षा' के साथ तुरंत चालू करते हैं। इसका मतलब है कि कन्स्ट्रक्टर को पहले से ही 'call_user_func_array' कार्रवाई में आने से पहले बुलाया गया है। आप समझ सकते हैं? सबसे पहले 'नया' आता है क्योंकि आप इसे पैरामीटर में अभिव्यक्ति के रूप में उपयोग करते हैं, फिर फ़ंक्शन कॉल होता है। लेकिन नए निष्पादित होने के कारण, '$ वर्ग' के निर्माता को पहले से ही बुलाया गया है (बिना तर्क के)। और फिर PHP ऑब्जेक्ट को स्ट्रिंग में बदलने की कोशिश करता है क्योंकि पहला पैरामीटर स्ट्रिंग या सरणी की अपेक्षा करता है। चूंकि आपका ऑब्जेक्ट तारों को कास्टिंग का समर्थन नहीं करता है, इसलिए आपको त्रुटि/चेतावनी मिलती है। – hakre
मैं देखता हूँ! धन्यवाद। मैं एक निर्माता को गतिशील रूप से तर्क पारित करने के अन्य तरीकों को देखूंगा। – tuespetre