学习阅读源代码。在那个 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);
瞧。