小编zuz*_*uza的帖子

在哪里实施工厂方法?

我一直在努力掌握OOP概念,虽然我确实掌握了大多数概念,但我经常发现自己需要一些关于实际实施的建议.其中一种情况是工厂方法.

我正在编写一个PHP应用程序,它将处理从Web和命令行界面传入的请求,因此我提出了以下简单的类继承结构来涵盖这两种类型的请求:

abstract class Request {
}

class HttpRequest extends Request {
}

class CliRequest extends Request {
}
Run Code Online (Sandbox Code Playgroud)

现在我需要一个工厂方法,它将返回一个具体的Request实例,具体取决于返回的值php_sapi_name():

public function create() {
    if(php_sapi_name() === 'cli')
        return new CliRequest();
    else
        return new HttpRequest();
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:我在哪里放?我至少可以想到三种可能性:

1)单独类中的静态方法:

class RequestFactory {
    public static function create() {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

2)单独类中的常规方法(需要首先实例化该类):

class RequestFactory {
    public function create() {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

3)抽象父类中的静态方法:

abstract class Request {
    public static function create() {
        // ...
    }
} …
Run Code Online (Sandbox Code Playgroud)

php oop factory

6
推荐指数
1
解决办法
316
查看次数

PHP / Curl:在下载正文之前检查响应头

在PHP中使用Curl,下载正文之前,有什么方法可以检查HTTP响应标头吗?假设我向某个URI发出GET请求,并且仅当Content-typeis 时才想获取内容text/html。我知道我可以先发出HEAD请求,然后再决定是否使用GET,但是仅在一个请求中有可能吗?

我基本上是在寻找等效的以下C#代码:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://some.uri");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if(response.ContentType.Equals("text/html")) {
    string body = new StreamReader(response.GetResponseStream()).ReadToEnd();
} else {
    // do nothing
}
Run Code Online (Sandbox Code Playgroud)

可能吗?

php curl http

5
推荐指数
1
解决办法
2099
查看次数

标签 统计

php ×2

curl ×1

factory ×1

http ×1

oop ×1