如何在php中返回新实例
我有以下代码:如何在php中返回新实例,php,Php,我有以下代码: class Email_Driver { public function testEmail_Driver() { echo "testEmail_Driver".RT; } } class Email_Smtp extends Email_Driver { public function testEmail_Smtp() { echo "testEmail_Smtp&quo
class Email_Driver
{
public function testEmail_Driver()
{
echo "testEmail_Driver".RT;
}
}
class Email_Smtp extends Email_Driver
{
public function testEmail_Smtp()
{
echo "testEmail_Smtp".RT;
}
}
class Email
{
public $instance;
public function __construct()
{
$this->instance = new Email_Smtp();
return $this->instance;
}
}
$mail = new Email();
var_dump($mail);
$mail->testEmail_Smtp(); //Fatal error: Uncaught Error: Call to undefined method Email::testEmail_Smtp()
$mail->testEmail_Driver();
在这种情况下,如何访问methode testEmail\u Smtp()和testEmail\u Driver()。基本上,class
Email
现在的作用与classEmail\u Smtp
完全相同:
class Email_Driver
{
public function testEmail_Driver()
{
echo "testEmail_Driver".PHP_EOL;
}
}
class Email_Smtp extends Email_Driver
{
public function testEmail_Smtp()
{
echo "testEmail_Smtp".PHP_EOL;
}
}
class Email extends Email_Smtp
{
// any more methods
}
$mail = new Email();
var_dump($mail);
$mail->testEmail_Smtp();
$mail->testEmail_Driver();
下面的代码应该足够了。基本上,class
Email
现在的作用与classEmail\u Smtp
完全相同:
class Email_Driver
{
public function testEmail_Driver()
{
echo "testEmail_Driver".PHP_EOL;
}
}
class Email_Smtp extends Email_Driver
{
public function testEmail_Smtp()
{
echo "testEmail_Smtp".PHP_EOL;
}
}
class Email extends Email_Smtp
{
// any more methods
}
$mail = new Email();
var_dump($mail);
$mail->testEmail_Smtp();
$mail->testEmail_Driver();
您正在将辅助类分配给
$instance
,因此为了使代码正常工作,您需要使用该实例
<?php
define('RT','<br />');
class Email_Driver{
public function testEmail_Driver(){
echo "testEmail_Driver".RT;
}
}
class Email_Smtp extends Email_Driver{
public function testEmail_Smtp(){
echo "testEmail_Smtp".RT;
}
}
class Email{
public $instance;
public function __construct(){
$this->instance = new Email_Smtp();
}
}
$mail = new Email();
printf('<pre>%s</pre>',print_r($mail,true));
$mail->instance->testEmail_Smtp(); //Fatal error: Uncaught Error: Call to undefined method Email::testEmail_Smtp()
$mail->instance->testEmail_Driver();
?>
您正在将辅助类分配给
$instance
,因此为了使代码正常工作,您需要使用该实例
<?php
define('RT','<br />');
class Email_Driver{
public function testEmail_Driver(){
echo "testEmail_Driver".RT;
}
}
class Email_Smtp extends Email_Driver{
public function testEmail_Smtp(){
echo "testEmail_Smtp".RT;
}
}
class Email{
public $instance;
public function __construct(){
$this->instance = new Email_Smtp();
}
}
$mail = new Email();
printf('<pre>%s</pre>',print_r($mail,true));
$mail->instance->testEmail_Smtp(); //Fatal error: Uncaught Error: Call to undefined method Email::testEmail_Smtp()
$mail->instance->testEmail_Driver();
?>
对不起,这不是我的解决办法。我缩短了上课时间。行$this->instance=newemail_Smtp();将是动态的,所以我不能简单地扩展我的类。@hamburger好的,我理解。我必须按照你在问题中给出的答案来做。很抱歉,这不是我的解决方案。我缩短了上课时间。行$this->instance=newemail_Smtp();将是动态的,所以我不能简单地扩展我的类。@hamburger好的,我理解。我必须使用你在问题中给出的内容。在这个例子中,我不会使用通用名称
instance
。smtp怎么样?好的,我明白了。我还可以直接发送一封新电子邮件吗;在我的Email类中?我不会在这个实例中使用泛型名称实例
。smtp怎么样?好的,我明白了。我还可以直接发送一封新电子邮件吗;在我的电子邮件课上?