在PHP中创建和使用匿名对象

假设我有一个简单的类,我创建它并像这样调用一个函数:
class tst
{
  private $s = "";

  public function __construct( $s )
  {
    $this->s = $s;
  }

  public function show()
  {
    return $this->s;
  }
}

$t = new tst( "hello world" );
echo "showing " . $t->show() . "n";
是否有任何语法或解决方法可以让我实例化tst的实例并调用show()函数而不将对象赋值给变量?我想做的事情如下:
echo new tst( "again" )->show();
我不想将我的函数声明为静态,因为我想在上面的两个例子中使用它们。     
已邀请:
你无法完全按照自己的意愿行事,但有一些变通方法可以让事情变得不稳定。 您可以创建一个返回新对象的函数
function tst( $s ) {
    return new tst( $s );
}

echo tst( "again" )->show();
    
回答你的问题:
public static function create( $s )
{
    return new tst($s);
}

public function show()
{
    return $this->s;
}
以上将允许你做
tst::create("again")->show()
。您可以根据需要重命名
create
。     
Agile Toolkit在任何地方都使用这种方法。它使用为全局对象祖先定义的add()方法包装器。这是一些现实生活中的代码:
$page
    ->add('CRUD')
    ->setModel('User')
    ->setMasterField('admin',false);
此代码创建“CRUD”视图,将其放在页面上,创建并链接Model_User类实例,该实例接收布尔“admin”字段的附加条件和默认值。 它将在页面上显示一个带有添加/编辑/删除功能的CRUD控件,允许编辑除管理员以外的所有用户。 这是描述概念的代码:
class AbstractObject {
    public $owner;
    function add($class){
        $c=new $class;
        $c->owner=$this;
        return $c;
    }
}

class Form extends AbstractObject {
    function dosomething(){
        return $this;
    }
}
class OtherForm extends Form {}

$object->add('Form')->dosomething()->owner
       ->add('OtherForm');  // etc
我认为这是非常实用的方法。 附:我必须注意异常的新语法:
throw $this->exception('Something went bad');
使用$ this将异常链接到对象,这是有错的,也可以设置异常的默认类。     

要回复问题请先登录注册