1、定义类
class Site {
#类常量不用$
const constant = '常量值';
/* 类成员变量 */
var $url;
var $title;
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private'; // __member
#静态变量
public static $my_static = 'foo';
#构造函数
function __construct( $par1, $par2 ) {
$this->url = $par1;
$this->title = $par2;
echo "构造"."<br>";
}
/* 类成员函数 */
function setUrl($par){
$this->url = $par;
}
function getUrl(){
echo $this->url."<br>";
}
function setTitle($par){
$this->title = $par;
}
function getTitle(){
echo $this->title."<br>";
}
#类函数同样可以设置public、private、protected,子类只能访问公有属性函数
public function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
public function staticValue() {
return self::$my_static;
}
#析构函数
function __destruct() {
print "销毁 " . $this->name . "\n";
}
}
2、类的实例化
$runoob = new Site('www.runoob.com', "菜鸟教程");
$taobao = new Site('www.taobao.com' , "淘宝" );
$google = new Site('www.google.com', "Google 搜索");
// $runoob->setTitle( "菜鸟教程" );
// $taobao->setTitle( "淘宝" );
// $google->setTitle( "Google 搜索" );
// $runoob->setUrl( 'www.runoob.com' );
// $taobao->setUrl( 'www.taobao.com' );
// $google->setUrl( 'www.google.com' );
// 调用成员函数,获取标题和URL
$runoob->getTitle();
$taobao->getTitle();
$google->getTitle();
$runoob->getUrl();
$taobao->getUrl();
$google->getUrl();
3、extends子类继承
class Child_Site extends Site {
var $category;
function __construct( $url, $title,$category )
{
$this->url = $url;
$this->title = $title;
$this->category = $category;
echo "子类构造"."<br>";
}
function setCate($par){
$this->category = $par;
}
function getCate(){
echo $this->category."<br>";
}
}
$obj = new Child_Site('www.baidu.com', "百度", "搜索引擎");
$obj->getCate();//study方法继承自Student
使用类方法访问可以看到全部变量
echo $obj->printHello()."<br>";
直接调用类成员变量使用 $类指针->变量名即可
echo $obj->public."<br>"; #能访问
echo $obj->protected."<br>"; #不能访问
echo $obj->private."<br>"; #不能访问
常量访问
echo $obj::constant."<br>";
无法通过类成员变量之间访问静态变量,但可以使用函数获得
echo $obj->my_static."<br>";
echo $obj->staticValue()."<br>";
4、interface接口类 空类,里面没有具体实现
interface iTemplate
{
public function setVariable($name, $var); //方法没有{}就表示没有方法体
//可以new iTempalte()嘛
public function getHtml($template); //也是抽象方法 abstract public function getHtml($template);,接口方法默认抽象方法为了简单把abstract关键字给去掉了
}
#声明数组
$vars = array();
#foreach循环
foreach($this->vars as $name => $value) {
$template = str_replace('{' . $name . '}', $value, $template);
}
5、抽象类,无实现,类实现用继承实现
abstract class AbstractClass //new AbstractClass
{
// 强制要求子类定义这些方法
abstract protected function getValue();//没有方法体
abstract protected function prefixValue($prefix);
// 普通方法(非抽象方法)
public function printOut() {
print $this->getValue() . PHP_EOL;
}
}