- 静态方法和静态属性的调用,(用类名::静态方法或静态属性)
类:
<?php
class Mysql{
protected $link="";//受保护属性
protected static $myself = ""; //静态属性$mysql,类没有创建实例时
也可以用
//__construct构造方法,数据库连接,在new Mysql()后自动运行,可
以传参数,不用调用,返回值return没有作用,不用写,只能是Public
function __construct($host,$username,$password,$dbname){
$link = mysqli_connect($host,$username,$password,$dbname);
if (!$link){
return "连接失败:".mysqli_connect_error();
}else{
$this->link = $link;
return $link;
}
}
//getInstance()用来产生一个对象
public static function getInstance($host,$username,$password,$dbname){
//静态方法
if(self::$myself === ""){
//静态属性myself为空,创>建一个对象
$ob = new self($host,$username,$password,$dbname); //实例化getInstance()自己
self::$myself = $ob; //调用自己类Mysql的静态>属性$myself,静态属性的调用要用$.
return $ob;
}else{
//静态属性不为空,直接返回用来以创建的对象
return self::$myself;
}
}
//防止对象被克隆,如果是public __clone,只要有clone(实例对象),>就会自动执行下面大括号的代码
private function __clone(){
//protected或private,这样执行clone(实例对象)就会报错。
echo "已克隆";
}
//数据库语句
function query($sql){
if(preg_match('/^select/i',$sql)){
$result = mysqli_query($this->link,$sql);
if($result){
return mysqli_fetch_all($result,MYSQLI_ASSOC);
}else{
return mysqli_fetch_all($result,MYSQLI_ASSOC);
return false;
}
}elseif(peeg_match('/^insert/i',$sql)){
$result = mysqli_query($this->link,$sql);
$id = mysqli_insert_id($this->link);
return $id;
}else{
$result = mysqli_query($this->link,$sql);
return $result;
}
}
//析构方法,当类对象被销毁时,该析构方法会自动执行,不用调用,只>能是Public
function __destruct(){
echo "运行结束";
return mysqli_close($this->link);
}
}
?>
实例对象:
<?php
require("./fangfa_class.php");
//实例化参数为getInstance方法的参数,getInstance是静态方法,直接用Mysql::getInstance()调用
$ob = Mysql::getInstance('localhost','jsj18137','123456','jsj18137');
$ob1 = Mysql::getInstance('localhost','jsj18137','123456','jsj18137');
var_dump($ob);
echo "<hr/>";
var_dump($ob1);
echo "<hr/>";
// $ob2 = clone($ob); //克隆ob对象
// var_dump($ob2);
//当运行到这里,程序关闭后,该类的析构方法会自动调用。用inset($ob),销毁
实例对象时也会自动调用析构方法
?>
图: