学习阅读源代码。在那个 GitHub 页面上搜索“超时”。
它会告诉你AbstractClient
有一个timeout
属性和一个setTimeout()
方法:
abstract class AbstractClient implements ClientInterface {
// [...]
protected $timeout = 5;
// [...]
public function setTimeout($timeout) {
$this->timeout = $timeout;
}
// [...]
}
现在你应该想,“我怎样才能到达那个对象?”。由于您正在使用该Browser
课程,因此您应该从那里开始。
查看Browser
的构造函数,您可以看到它将client
属性设置为实现的类ClientInterface
:
public function __construct(ClientInterface $client = null, FactoryInterface $factory = null) {
$this->client = $client ?: new FileGetContents();
$this->factory = $factory ?: new Factory();
}
由于您没有将任何参数传递给构造函数,它会将客户端设置为 的实例FileGetContents
,该实例扩展AbstractStream
,进而扩展AbstractClient
(通过文件并自己查看)。
由于client
在 的构造函数中设置的属性Browser
设置为私有,因此您必须找到一种方法来获取它。浏览课程,您会发现:
public function getClient() { /* ... */ }
好的。我们现在知道我们可以通过调用来获取客户端getClient()
。我们也知道客户端有一个setTimeout()
方法:
$buzz->getClient()->setTimeout(40);
瞧。