php静态方法创建对象,php学习之类与对象的类的静态方法

基本介绍

当程序员需要对静态属性进行操作时,就需要定义静态方法处理,静态方法是专门操作静态属性的

基本语法

class 类名{

访问修饰符 static function 函数名 (){

//函数体

}

}

说明:

静态方法是在类中定义的

static是关键词

静态方法是专门用于操作静态属性

静态方法可以直接用类名调用,形式是:类名::静态方法名(参数)

小案例:

//静态方法

class Person{

public $name;

private static $age=18;

//静态方法来操作静态属性

public static function getAge(){

echo '年龄是 '.self::$age;

}

}

//通过类名在外部直接调用静态方法

Person::getAge();

?>

9374e99fd27b83b3d0441670cf90a2a6.png

静态方法注意事项

在类的外部调用静态方法:类名::静态方法名,或者对象名->静态方法名或者对象名::静态方法名,后面两种不推荐使用

在类的内部调用静态方法:self::静态方法名  或者类名::静态方法名,通过$this也可以

静态方法中只能访问静态属性,不能访问非静态属性

普通成员方法,既可以访问非静态属性也可以访问静态属性

如果静态方法被protected或private修饰,也不能在类的外部使用

案例:

//静态方法

class Person{

public $name;

private static $age=18;

//构造方法

public function __construct($name){

$this->name=$name;

}

//静态方法来操作静态属性

public static function getAge(){

echo '年龄是 '.self::$age;

//静态方法中只能访问静态属性,不能访问非静态属性

//echo $this->name.'的年龄是 '. self::$age;//这样写是错误的 不能访问非静态属性

//echo self::$name.'的年龄是 '. self::$age;//这样写也是错误的 不能访问非静态属性

}

//在类的内部调用静态方法

public function show(){

//方法一:self::方法名

self::getAge();

//方法二:类名::方法名

Person::getAge();

//方法三:$this->方法名

$this->getAge();

}

}

//通过类名在外部直接调用静态方法

Person::getAge();

//在类的外部通过对象调用静态方法

$person = new Person('张三');

$person->getAge();

//在类的外部通过对象名::静态方法调用

$person::getAge();

$person->show();

?>

8182a6e76b8702766877d437dedae9bc.png

静态属性和静态方法实战: 单例模式

编写一个操作数据库的工具类,要求只能创建一个对象

//编写一个操作数据库的工具类,要求只能创建一个对象

class DaoMysql{

//定义需要的属性

//连接数据库

private $mysql_link;

//定义一个静态属性,用来类的对象实例

private static $instance = null;

//构造方法

public function __construct($host,$user,$pass){

//这里只连接一次数据库,减少资源

$this->mysql_link = @mysql_connect($host,$user,$pass);

echo $this->mysql_link;

}

//写一个静态方法,通过这个静态方法来创建对象实例

public static function getSingleton($host,$user,$pass){

//通过getSingleton来创建对象

//判断控制是否已经创建过对象

if(self::$instance == null){

self::$instance = new DaoMysql($host,$user,$pass);

}

return self::$instance;

}

//阻止克隆

private function __clone(){}

}

$dao1 = DaoMysql::getSingleton('localhost','root','');

$dao2 = DaoMysql::getSingleton('localhost','root','root');

var_dump($dao1,$dao2);//结果都是同一个对象

?>

1dc8069e5ceaf3e6acd4efdd5bc8e945.png

另一种写法(推荐)

instance是类型运算符,它用于判断某个变量是否是某个类的对象

//编写一个操作数据库的工具类,要求只能创建一个对象

class DaoMysql{

//定义需要的属性

//连接数据库

private $mysql_link;

//定义一个静态属性,用来类的对象实例

private static $instance = null;

//构造方法

public function __construct($host,$user,$pass){

//这里只连接一次数据库,减少资源

$this->mysql_link = @mysql_connect($host,$user,$pass);

echo $this->mysql_link;

}

//写一个静态方法,通过这个静态方法来创建对象实例

public static function getSingleton($host,$user,$pass){

//通过getSingleton来创建对象

//判断控制是否已经创建过对象

/* //第一种写法

if(self::$instance == null){

self::$instance = new DaoMysql($host,$user,$pass);

}

return self::$instance;

} */

//第二种写法

//instanceof是类型运算符,它用于判断某个变量是否是某个类的对象

if(!self::$instance instanceof self){

self::$instance = new self($host,$user,$pass);

}

return self::$instance;

}

//阻止克隆

private function __clone(){}

}

$dao1 = DaoMysql::getSingleton('localhost','root','');

$dao2 = DaoMysql::getSingleton('localhost','root','root');

var_dump($dao1,$dao2);//结果都是同一个对象

?>

e7f44a531ff2af27aca537d1412b591f.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值