Snoopy模拟网页浏览器的PHP类

Snoopy是一个模拟网页浏览器的PHP类,他可以获取网页内容和发送表单。

  • 获取网页的内容
  • 获取网页的文字(去掉HTML代码)
  • 获取网页的链接
  • 支持代理
  • 支持基本的用户/密码认证模式
  • 支持自定义user_agent,referer,cookies和header内容
  • 支持浏览器转向,并能控制转向深度
  • 能把网页中的链接扩展成高质量的url(默认)
  • 提交表单数据并且获取返回值
  • 支持跟踪HTML框架(v0.92增加)
  • 支持跳转的时候传递cookies

Snoopy需要PHP PCRE扩展(Perl Compatible Regular Expressions),需要PHP 3.0.9以上版本,如果要支持read超时,需要PHP 4以上版本。Snoopy在PHP 3.0.12版本下面开发和测试。

虽然Snoopy最后一个版本1.2.4发布距离现在已经有4年之久(2008年10月发布),但是仍然不影响他的易用和强大。

下载地址:http://sourceforge.net/projects/snoopy/

PHP类中的$this和self的区别

$this代表当前对象(类)的实例,self代表当前类,当前类的实例很好理解,那么什么叫当前类呢? 看看下面例子:

<?php
class Person {
    private $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }

    public function getTitle() {
        return $this->getName()." the person";
    }

    public function sayHello() {
        echo "Hello, I'm ".$this->getTitle()."<br/>";
    }

    public function sayGoodbye() {
        echo "Goodbye from ".self::getTitle()."<br/>";
    }
}

class Geek extends Person {
    public function __construct($name) {
        parent::__construct($name);
    }

    public function getTitle() {
        return $this->getName()." the geek";
    }
}

$geekObj = new Geek("Ludwig");
$geekObj->sayHello();
$geekObj->sayGoodbye();

上面代码将会输出:

Hello, I'm Ludwig the geek
Goodbye from Ludwig the person

子类覆盖了父类的方法之后,在外面我们是无法访问父类被覆盖的方法,那么在子类中和在父类中是可以访问的:

  • 在子类中可以通过parent::method()访问
  • 在父类中可以通过self::method()访问