2011-08-18 57 views
4

我有一個關於PHP類的簡單問題。簡單的PHP類有關方法的問題

多次我見過其他類框架等使用類似的方法調用。

$post->data->text(); 

我喜歡這個功能,而不僅僅是做這樣的事情。

$post->dataReturnAsText(); 

但我不太確定他們是如何創建這個功能,可能有一個'子方法'?希望有人能指出我在正確的方向....

回答

2

您提供的例子有沒有什麼特別的:

<?php 

class Post{ 
    public $data; 
} 

class Data{ 
    public function text(){ 
    } 
} 

$post = new Post; 
$post->data = new Data; 
$post->data->text(); 

但是,你可能發現它在方法鏈的情況下(在JavaScript庫非常流行):

<?php 

class Foo{ 
    public function doThis(){ 
     return $this; 
    } 

    public function doThat(){ 
     return $this; 
    } 
} 

$foo = new Foo; 
$foo->doThis()->doThat()->doThis(); 
0

在這種情況下,數據僅僅是類的屬性,它包含另一個對象:

class data 
{ 
    public function text() 
    { 
    } 
} 

class thing 
{ 
    public $data; 
} 

$thing = new thing(); 
$thing->data = new data(); 
$thing->data->text(); 
0

它可能是一個公正的「數據」是包含一個對象問心無愧例如文本屬性$後的AA公共財產:

class Textable { 
    public $text; 

    function __construct($intext) { 
     $this->text = $intext; 
    } 
} 

class Post { 

    public $data; 

    function __construct() { 
     $data = new Textable("jabberwocky"); 
    } 

} 

這將允許你這樣做:

$post = new Post(); 
echo($post->data->text); // print out "jabberwocky" 

當然,正確的OOP方式是使財產私人,並允許訪問使用吸氣功能,但除了點...