本文目錄一覽:
- 1、php 類中獲取實例化後的自身
- 2、詳解PHP中instanceof關鍵字及instanceof關鍵字有什麼作用
- 3、php中 instanceof有什麼用
- 4、php類屬性的賦值問題
- 5、php類怎麼給靜態變量賦值
- 6、PHP設計模式之單例模式
php 類中獲取實例化後的自身
class aaaa{
private static $instance = null;
public function __construct(){
self::$instance = this;
}
public static function getInstance(){
return self::$instance
}
}
調用aaaa:getInstance()就是返回aaaa實例
詳解PHP中instanceof關鍵字及instanceof關鍵字有什麼作用
PHP5的另一個新成員是instdnceof關鍵字。使用這個關鍵字可以確定一個對象是類的實例、類的子類,還是實現了某個特定接口,並進行相應的操
作。在某些情況下,我們希望確定某個類是否特定的類型,或者是否實現了特定的接口。instanceof操作符非常適合完成這個任務。
instanceof操作符檢查三件事情:實例是否某個特定的類型,實例是否從某個特定的類型繼承,實例或者他的任何祖先類是否實現了特定的接口。例如,
假設希望了解名為manager的對象是否為類Employee的實例:
$manager = new Employee();
…
if ($manager instanceof Employee)
echo “Yes”;
有兩點值得注意。首先,類名沒有任何定界符(引號)。使用定界符將導致語法錯誤。其次,如果比較失敗,腳本將退出執行。instanceof關鍵字在同時
處理多個對象時特別有用。例如,你可能要重複地調用某個函數,但希望根據對象類型調整函數的行為。可以使用case語句和instanceof關鍵字來實
現這個目標。
class test2{}
class test{}
class testChilern Extends test{}
$a = new test2();
$m = new test();
$i = ($m instanceof test);
if($i)
echo ‘$m是類test的實例!br /’; // get this value
switch ($a instanceof test){
case true :
echo ‘YESbr /’;
break;
case false :
echo ‘Nobr /’; //get this value
break;
}
$d=new testChilern();
if($d instanceof test)echo ‘$d是類test的子類!br /’; // get this value
php中 instanceof有什麼作用
作用:(1)判斷一個對象是否是某個類的實例,(2)判斷一個對象是否實現了某個接口。
第一種用法:
?php
$obj = new A();
if ($obj instanceof A) {
echo ‘A’;
}
第二種用法:
?php
interface ExampleInterface
{
public function interfaceMethod();
}
class ExampleClass implements ExampleInterface
{
public function interfaceMethod()
{
return ‘Hello World!’;
}
}
$exampleInstance = new ExampleClass();
if($exampleInstance instanceof ExampleInterface){
echo ‘Yes, it is’;
}else{
echo ‘No, it is not’;
}
?
輸出結果:Yes, it is
另外,需注意 instanceof 與 is_subclass_of() 的區別,請看代碼:
lass Foo { public $foobar = ‘Foo’;
public function test() {
echo $this-foobar . “\n”;
}
}
class Bar extends Foo {
public $foobar = ‘Bar’;
}
$a = new Foo();
$b = new Bar();
echo “use of test() method\n”;
$a-test();
$b-test();
echo “instanceof Foo\n”;
var_dump($a instanceof Foo); // TRUE
var_dump($b instanceof Foo); // TRUE
echo “instanceof Bar\n”;
var_dump($a instanceof Bar); // FALSE
var_dump($b instanceof Bar); // TRUE
echo “subclass of Foo\n”;
var_dump(is_subclass_of($a, ‘Foo’)); // FALSE
var_dump(is_subclass_of($b, ‘Foo’)); // TRUE
echo “subclass of Bar\n”;
var_dump(is_subclass_of($a, ‘Bar’)); // FALSE
var_dump(is_subclass_of($b, ‘Bar’)); // FALSE
?
php中 instanceof有什麼用
作用:(1)判斷一個對象是否是某個類的實例,(2)判斷一個對象是否實現了某個接口。
第一種用法:
?php
$obj = new A();
if ($obj instanceof A) {
echo ‘A’;
}
第二種用法:
?php
interface ExampleInterface
{
public function interfaceMethod();
}
class ExampleClass implements ExampleInterface
{
public function interfaceMethod()
{
return ‘Hello World!’;
}
}
$exampleInstance = new ExampleClass();
if($exampleInstance instanceof ExampleInterface){
echo ‘Yes, it is’;
}else{
echo ‘No, it is not’;
}
?
輸出結果:Yes, it is
另外,需注意 instanceof 與 is_subclass_of() 的區別,請看代碼:
?php
class Foo {
public $foobar = ‘Foo’;
public function test() {
echo $this-foobar . “\n”;
}
}
class Bar extends Foo {
public $foobar = ‘Bar’;
}
$a = new Foo();
$b = new Bar();
echo “use of test() method\n”;
$a-test();
$b-test();
echo “instanceof Foo\n”;
var_dump($a instanceof Foo); // TRUE
var_dump($b instanceof Foo); // TRUE
echo “instanceof Bar\n”;
var_dump($a instanceof Bar); // FALSE
var_dump($b instanceof Bar); // TRUE
echo “subclass of Foo\n”;
var_dump(is_subclass_of($a, ‘Foo’)); // FALSE
var_dump(is_subclass_of($b, ‘Foo’)); // TRUE
echo “subclass of Bar\n”;
var_dump(is_subclass_of($a, ‘Bar’)); // FALSE
var_dump(is_subclass_of($b, ‘Bar’)); // FALSE
?
輸出結果(PHP 5.4.4):
use of test() method
Foo
Bar
instanceof Foo
bool(true)
bool(true)
instanceof Bar
bool(false)
bool(true)
subclass of Foo
bool(false)
bool(true)
subclass of Bar
bool(false)
php類屬性的賦值問題
cache_factory (這個是類名)::$cache_factory (這個是類內的私有靜態屬性,該屬性的值是cache_factory類的實例)-cache_config = $cache_config; 其他不需要解釋了吧
不過這個代碼很爛,不建議把這個當作參考資料。幫你修改了一下,看這個吧
final class cache_factory {
private static $instance;
protected $cache_config = array();
protected $cache_list = array();
protected function __construct(array $configs) {
$this-cache_config = $configs;
}
public static function get_instance(array $cache_config = null) {
if (! self::$instance instanceof cache_factory) {
if (is_null($cache_config)) {
die(‘無效的初始化設置’);
}
self::$instache = new cache_factory($cache_configs);
}
return self::$instance;
}
}
php類怎麼給靜態變量賦值
case-1:給類中的靜態變量賦值:
class PHPJungle{
private static $__instance = null;# 類中的私有成員:靜態變量
public function __construct(){
}
public static function getInstance(){
if(self::$__instance instanceof self)
return self::$__instance; # 給靜態變量賦值
return new self();
}
public function anyMethod(){
echo ‘Hello world!’,’hr’;
return;
}
}
$PJ = new PHPJungle();
$PJ-getInstance()-anyMethod();
case-2:給函數中的局部靜態變量賦值:
function hello(){
static $total = 0;
echo $total,’hr’;
$total++; # 給函數中的局部靜態變量賦值
}
hello();# 0
hello();# 1
hello();# 2
PHP設計模式之單例模式
單例模式
:使得類的一個對象成為系統中的唯一實例.
PHP中使用單例模式最常見的就是數據庫操作了。避免在系統中有多個連接數據庫的操作,浪費系統資源的現象,就可以使用單例模式。每次對數據庫操作都使用一個實例。
簡單示例
class
AClass
{
//
用來存儲自己實例
public
static
$instance;
//
私有化構造函數,防止外界實例化對象
private
function
__construct()
{}
//
私有化克隆函數,防止外界克隆對象
private
function
__clone()
{}
//
靜態方法,單例訪問統一入口
public
static
function
getInstance()
{
if
(!(self::$instance
instanceof
self)){
self::$instance
=
new
self();
}
return
self::$instance;
}
//
test
public
function
test()
{
return
“done”;
}
//
私有化克隆函數,防止外界克隆對象
private
function
__clone()
{}
}
class
BClass
extends
AClass{
}
//
獲取實例
$aclass
=
AClass::getInstance();
$bclass
=
BClass::getInstance();
//
調用方法
echo
$aclass-test();
對一些比較大型的應用來說,可能連接多個數據庫,那麼不同的數據庫公用一個對象可能會產生問題,比如連接句柄的分配等,我們可以通過給$instance變成數組,通過不同的參數來控制
簡單示例
class
DB
{
//
用來存儲自己實例
public
static
$instance
=
array();
public
$conn;
//
私有化構造函數,防止外界實例化對象
private
function
__construct($host,
$username,
$password,
$dbname,
$port)
{
$this-conn
=
new
mysqli($host,
$username,
$password,
$dbname,
$port);
}
//
靜態方法,單例訪問統一入口
public
static
function
getInstance($host,
$username,
$password,
$dbname,
$port)
{
$key
=
$host.”:”.$port;
if
(!(self::$instance[$key]
instanceof
self)){
self::$instance[$key]
=
new
self($host,
$username,
$password,
$dbname,
$port);#實例化
}
return
self::$instance[$key];
}
//query
public
function
query($ql)
{
return
$this-conn-query($sql);
}
//
私有化克隆函數,防止外界克隆對象
private
function
__clone()
{}
//釋放資源
public
function
__destruct(){
$this-conn-close();
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/245143.html