如何在 php 中实现这个?

发布于 2024-09-19 12:22:38 字数 455 浏览 8 评论 0原文

可能的重复:
如何在 PHP5 中构建多 oop 函数

嘿,

我'我在几个论坛系统中看到过这种代码,但我找不到任何这样的例子:

$this->function()->anotherfunction();

你可以在 PDO 中看到类似的例子:

$pdo->query($sqlQuery)->fetch();

我不知道这种类型的编码在 PHP 中是如何调用的,因此我可以不必继续寻找任何教程和示例。

Possible Duplicate:
How to build multi oop functions in PHP5

Hey,

I've seen this kind of code in a couple of forum systems but I can't find any examples like this:

$this->function()->anotherfunction();

You can see a similar example in PDO:

$pdo->query($sqlQuery)->fetch();

I don't know how this type of coding is called in PHP and thus I can't get on looking for any tutorials and examples.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

赤濁 2024-09-26 12:22:40

您只需确保可链接方法返回对象引用,然后就可以将另一个方法调用链接到结果上。

您可以像 @Tim Cooper 所示返回 $this ,也可以返回对另一个不同对象的引用:

class Hand
{
  protected $numFingers = 5;
  public function countFingers() { return $this->numFingers; }
}

class Arm
{
  protected $hand;
  public function getHand() { return $this->hand; }
}

$n = $body->getLeftArm()    // returns object of type Arm
          ->getHand()       // returns object of type Hand 
          ->countFingers(); // returns integer

您显示的 PDO 示例使用两种不同的对象类型。 PDO::query() 实例化并返回一个 PDOStatement 对象,该对象又具有一个fetch() 方法。

此技术也可用于 Fluent 接口,特别是在实现域接口时- 特定语言。但并非所有方法链都是流畅的接口。

请参阅 Martin Fowler 在 2005 年撰写的有关流畅界面的内容。他引用了 领域驱动设计因提出这个想法而闻名。

You just make sure a chainable method returns an object reference, and you can chain another method call onto the result.

You can return $this as @Tim Cooper shows, or you can return a reference to another different object:

class Hand
{
  protected $numFingers = 5;
  public function countFingers() { return $this->numFingers; }
}

class Arm
{
  protected $hand;
  public function getHand() { return $this->hand; }
}

$n = $body->getLeftArm()    // returns object of type Arm
          ->getHand()       // returns object of type Hand 
          ->countFingers(); // returns integer

The PDO example you show uses two different object types. PDO::query() instantiates and returns a PDOStatement object, which in turn has a fetch() method.

This technique can also be used for a fluent interface, particularly when implementing an interface for domain-specific language. Not all method chains are fluent interfaces, though.

See what Martin Fowler wrote about fluent interfaces in 2005. He cites Eric Evans of Domain-Driven Design fame as having come up with the idea.

面如桃花 2024-09-26 12:22:39

这称为方法链。一个例子如下。请注意,我们正在返回当前对象。

class Example
{
   function test1($var)
   {
      return $this;
   }
   function test2($var)
   {
      return $this;
   }
}

$obj = new Example();
$obj->test1('Var')->test2(543)->test1(true);

This is called method chaining. An example would be the following. Notice we are returning the current object.

class Example
{
   function test1($var)
   {
      return $this;
   }
   function test2($var)
   {
      return $this;
   }
}

$obj = new Example();
$obj->test1('Var')->test2(543)->test1(true);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文