是否可以在PHP中执行类似的操作?
Image::myMethod(); // returns array
Image::myMethod()->toSring(); // Returns a string built inside the method toString
换句话说,PHP是否有一种方法可以检测该方法是否被另一个方法扩展(如果是),然后返回self/this
?
答案 0 :(得分:4)
整理我在评论中的意思,这将在逻辑上为您提供相同的行为,尽管实现细节有所不同:
class Artifact extends ArrayObject {
public function toString(): string {
// custom stuff, use ArrayObject api to access underlying data
}
}
class Image {
public function myMethod(): Artifact {
// generate your array data, then:
return new Artifact($data);
}
}
答案 1 :(得分:1)
通常这是不可能的。但是您可以通过使用__toString()魔术方法并实现ArrayAccess接口(如果要在循环中使用它,则可以使用Iterator)来实现非常相似的行为。
A,实现可能非常庞大。
class MyClass implements Iterator, ArrayAccess
{
...
public function __toString() { ... }
public function current ( ) { ... }
public function key ( ) { ... }
public function next ( ) { ... }
public function rewind ( ) { ... }
public function valid ( ) { ... }
public function offsetExists ( $offset ) { ... }
public function offsetGet ( $offset ) { ... }
public function offsetSet ( $offset , $value ) { ... }
public function offsetUnset ( $offset ) { ... }
}
function myFunc()
{
return new MyClass(...);
}
(string)myFunc() // returns string value
myFunc()[0] // access as array
foreach (myFunc() as $value) // iterate as array