2013-01-19 43 views
0

我只是想知道這是否可能在C++中。類PHP的語法

在PHP(框架),我有時會看到類(對象)和方法中的類被訪問:

$this->encrypt->decode($msg, $key); 

在我的節目之一,我有以下幾點:

Directory *d = new Directory("dir"); 
d->open(); 

是有可能有:

Directory *d = new Directory("dir")->open(); 

所以這兩個方法可以在同一行執行?

+1

'目錄(「目錄」) .open();',但是你不能在那裏放入一個變量聲明。 – chris

+0

其實,你可以在技術上做'open'回報'* this'中不必要地使用'目錄d(目錄(「DIR)。開());' – chris

回答

1

PHP代碼$this->encrypt->decode($msg, $key);被調用當前類中的encryptdecode()方法返回。

你的代碼正在執行初始化類的不同的任務,然後調用它。

在你不能在PHP做同樣的方式:

$test = new Test()->method(); 

..你不能做到這一點在C++或者沒有。在這種情況下,你不會指望在$testTest一個實例,它反而會成爲method()一個新實例測試對象上的回報。

這就是說,你的確可以內嵌像你說的,如果你只需要對open()(或什麼都沒有)的返回值,而不是Directory實例:

Directory("dir").open(); 
+0

感謝您的答覆:)所以它不可能有?..「D->打開() - >文件();」而不是創建新實例,這是一個壞榜樣給(對我而言) – Phorce

+0

@Phorce,應該是可以的,只要'。 open()'返回了它自己的一個實例。但是,你的PHP例子是不同的。 –

1

沒有,除非Directory類的成立,明確支持這個是不可能的。這通常涉及使類中的大多數方法返回對自身的引用,以便可以將方法調用鏈接在一起。

你的php的例子是完全不同的東西。 C++版本您發佈將是例子:

Directory("dir").open(); 

沒有捕捉Directory實例與Directory("dir")