Başka bir sınıfın örneğinde argümanları olan bir sınıfı başlatmam gereken durumlarda yaşıyorum. i argümanlar geçerken Test sınıfının bir örneğini oluşturmaya çalıştığınızda ŞimdiPHP: Başka bir sınıfın içinden argümanlarla bir sınıf nasıl oluşturulur
class myclass
{
function cls($file_name, $args = array())
{
include $file_name . ".php";
if (isset($args))
{
// this is where the problem might be, i need to pass as many arguments as test class has.
$class_instance = new $file_name($args);
}
else
{
$class_instance = new $file_name();
}
return $class_instance;
}
}
: i sınıfının cls'ye altında işlevini kullanarak sınıfın üzerindeki örneğini gerek Şimdi
//test.php
class test
{
function __construct($a, $b, $c)
{
echo $a . '<br />';
echo $b . '<br />';
echo $c . '<br />';
}
}
: İşte prototipidir o kadar:
$myclass = new myclass;
$test = $myclass->cls('test', array('a1', 'b2', 'c3'));
o verir hatası: Eksik argüman 1 ve 2; sadece ilk argüman geçer.
Bu, yapıcı işlevinde bağımsız değişkenleri olmayan bir sınıfı başlatıyorsa iyi çalışır.
Tecrübeli PHP geliştiricileri için, yukarıda bir çok sorun olmamalıdır. Lütfen yardım et.
Teşekkür
yapabilirsiniz
Sorunuzla ilgili değil, ancak işlev tanımında array() öğesini atadığınızdan $ args her zaman "isset" olacaktır. "Empty" veya "$ args = null" ile ilgileniyor olabilirsiniz. – Tordek
Üzgünüm, bu aynı zamanda sorunuzla da alakalı değil, ama ne yaptığınız güzel değil. sorunuzun cevabı: yapıcınızın bir dizi almasına, bazı sınıf özelliklerine sahip olmasına izin verin, ardından diziyi işleyin ve onu sınıf öznitelikleriyle eşleştirin. Ama yine de, havalı olmayan bir şey yapıyorsun. – DarthVader
test sınıfı ve diğerleri, diğer geliştiriciler tarafından argümanlarla ve onsuz kendi yollarını kullanarak yapılmalıdır, bu yüzden bunları sadece argümanları kurucu olarak diziler halinde geçirmek için kısıtlamak istemiyorum. – Sarfraz