導航:首頁 > 編程語言 > php實例方法的區別

php實例方法的區別

發布時間:2022-04-17 13:21:33

『壹』 thinkphp中連接資料庫實例化方法D和M的區別

  1. D方法可以自動檢測模型類,如果存在自定義的模型類,則實例化自定義模型類,如果不存在,則會實例化系統的ThinkModel基類,同時對於已實例化過的模型,不會重復去實例化。

  2. D方法實例化模型類的時候通常是實例化某個具體的模型類,如果你僅僅是對數據表進行基本的CURD操作的話,使用M方法實例化的話,由於不需要載入具體的模型類,所以性能會更高。

『貳』 php靜態方法和實例方法的區別

static關鍵字用來修飾屬性、方法,稱這些屬性、方法為靜態屬性、靜態方法。

static關鍵字聲明一個屬性或方法是和類相關的,而不是和類的某個特定的實例相關,因此,這類屬性或方法也稱為「類屬性」或「類方法」

如果訪問控制許可權允許,可不必創建該類對象而直接使用類名加兩個冒號「::」調用。

static關鍵字可以用來修飾變數、方法。

不經過實例化,就可以直接訪問類中static的屬性和static的方法。

static 的屬性和方法,只能訪問static的屬性和方法,不能類訪問非靜態的屬性和方法。因為靜態屬性和方法被創建時,可能還沒有任何這個類的實例可以被調

用。

static的屬性,在內存中只有一份,為所有的實例共用。

使用self:: 關鍵字訪問當前類的靜態成員。

一個類的所有實例,共用類中的靜態屬性。

也就是說,在內存中即使有多個實例,靜態的屬性也只有一份。

下面例子中的設置了一個計數器$count屬性,設置private 和 static 修飾。

這樣,外界並不能直接訪問$count屬性。而程序運行的結果我們也看到多個實例在使用同一個靜態的$count 屬性。

<?php
class user
{
private static $count = 0 ; //記錄所有用戶的登錄情況.
public function __construct() {
self::$count = self::$count + 1;
}
public function getCount() {
return self::$count;
}
public function __destruct() {
self::$count = self::$count - 1;
}
}
$user1 = new user();
$user2 = new user();
$user3 = new user();
echo "now here have " . $user1->getCount() . " user";
echo "<br />";
unset($user3);
echo "now here have " . $user1->getCount() . " user";
?>

靜態屬性直接調用
靜態屬性不需要實例化就可以直接使用,在類還沒有創建時就可以直接使用。

使用的方式是: 類名::靜態屬性名

<?php
class Math
{
public static $pi = 3.14;
}
// 求一個半徑3的園的面積。
$r = 3;
echo "半徑是 $r 的面積是<br />";
echo Math::$pi * $r * $r;
echo "<br /><br />";
//這里我覺得 3.14 不夠精確,我把它設置的更精確。
Math::$pi = 3.141592653589793;
echo "半徑是 $r 的面積是<br />";
echo Math::$pi * $r * $r;
?>

類沒有創建,靜態屬性就可以直接使用。那靜態屬性在什麼時候在內存中被創建? 在PHP中沒有看到相關的資料。引用Java中的概念,來解釋應該也具有通用性

。靜態屬性和方法,在類被調用時創建。

靜態方法
靜態方法不需要所在類被實例化就可以直接使用。

使用的方式是類名::靜態方法名

下面我們繼續寫這個Math類,用來進行數學計算。我們設計一個方法用來算出其中的最大值。既然是數學運算,我們也沒有必要去實例化這個類,如果這個方法

可以拿過來就用就方便多了。我們這只是為了演示static方法而設計的這個類。在PHP提供了 max() 函數比較數值。

view plain to clipboardprint?
<?php
class Math
{
public static function Max($num1, $num2) {
return $num1 > $num2 ? $num1 : $num2;
}
}
$a = 99;
$b = 88;
echo "顯示 $a 和 $b 中的最大值是";
echo "<br />";
echo Math::Max($a, $b);
echo "<br />";
echo "<br />";
echo "<br />";
$a = 99;
$b = 100;
echo "顯示 $a 和 $b 中的最大值是";
echo "<br />";
echo Math::Max($a,$b);
?>

靜態方法如何調用靜態方法
第一個例子,一個靜態方法調用其它靜態方法時,使用self::

<?php
// 實現最大值比較的Math類。
class Math
{
public static function Max($num1, $num2) {
return $num1 > $num2 ? $num1 : $num2;
}
public static function Max3($num1, $num2, $num3) {
$num1 = self::Max($num1, $num2);
$num2 = self::Max($num2, $num3);
$num1 = self::Max($num1, $num2);
return $num1;
}
}
$a = 99;
$b = 77;
$c = 88;
echo "顯示 $a $b $c 中的最大值是";
echo "<br />";
echo Math::Max3($a, $b, $c);
?>

靜態方法調用靜態屬性
使用self:: 調用本類的靜態屬性。

<?php
//
class Circle
{
public static $pi = 3.14;
public static function circleAcreage($r) {
return $r * $r * self::$pi;
}
}
$r = 3;
echo " 半徑 $r 的圓的面積是 " . Circle::circleAcreage($r);
?>

靜態方法不能調用非靜態屬性 。不能使用self::調用非靜態屬性。

<?php
// 這個方式是錯誤的
class Circle
{
public $pi = 3.14;
public static function circleAcreage($r) {
return $r * $r * self::pi;
}
}
$r = 3;
echo " 半徑 $r 的圓的面積是 " . Circle::circleAcreage($r);
?>

也不能使用 $this 獲取非靜態屬性的值。

靜態方法調用非靜態方法
PHP5中,在靜態方法中不能使用 $this 標識調用非靜態方法。

<?php
// 實現最大值比較的Math類。
class Math
{
public function Max($num1, $num2) {
echo "bad<br />";
return $num1 > $num2 ? $num1 : $num2;
}
public static function Max3($num1, $num2, $num3) {
$num1 = $this->Max($num1, $num2);
$num2 = $this->Max($num2, $num3);
$num1 = $this->Max($num1, $num2);
return $num1;
}
}
$a = 99;
$b = 77;
$c = 188;
echo "顯示 $a $b $c 中的最大值是";
echo "<br />";
echo Math::Max3($a, $b, $c); //同樣的這個會報錯
?>

當一個類中有非靜態方法被self:: 調用時,系統會自動將這個方法轉換為靜態方法。

<?php
// 實現最大值比較的Math類。
class Math
{
public function Max($num1, $num2) {
return $num1 > $num2 ? $num1 : $num2;
}
public static function Max3($num1, $num2, $num3) {
$num1 = self::Max($num1, $num2);
$num2 = self::Max($num2, $num3);
$num1 = self::Max($num1, $num2);
return $num1;
}
}
$a = 99;
$b = 77;
$c = 188;
echo "顯示 $a $b $c 中的最大值是";
echo "<br />";
echo Math::Max3($a, $b, $c);
?>

『叄』 PHP 反射類和實例化類的區別

實例化類用的更高,反射類在一些模式中用的較多

『肆』 PHP中魔術變數__METHOD__與__FUNCTION__的區別

本文實例講述了PHP中魔術變數__METHOD__與__FUNCTION__的區別,分享給大家供大家參考。具體分析如下:
__METHOD__類的方法名(PHP
5.0.0
新加)。返回該方法被定義時的名字(區分大小寫)。
__FUNCTION__函數名稱(PHP
4.3.0
新加)。自
PHP
5
起本常量返回該函數被定義時的名字(區分大小寫)。在
PHP
4
中該值總是小寫字母的。
文檔解釋都是說返回函數(方法)的名字。區別在於:
__FUNCTION__只是返回方法的名字;
__METHOD__返回類的名字和方法的名字。
<?php
class
Test{
public
function
doit(){
echo
__FUNCTION__;
}
public
function
doitAgain(){
echo
__METHOD__;
}
}
$obj
=
new
Test();
$obj->doit();
echo
'<br>';
$obj->doitAgain();
?>
輸出結果為:
doit
Test::doitAgain
希望本文所述對大家的PHP程序設計有所幫助。

『伍』 PHP strcmp()和strcasecmp()的區別實例

這篇文章主要介紹了PHP中strcmp()和strcasecmp()函數字元串比較用法,結合實例形式較為詳細的分析了strcmp()和strcasecmp()函數的功能,使用方法與區別
本文實例講述了PHP中strcmp()和strcasecmp()函數字元串比較用法。分享給大家供大家參考,具體如下:
一、PHP中strcmp()函數用於比較兩個字元串(區分大小寫),其定義如下:
strcmp(string1,string2)
參數說明:
string1
必需。規定要比較的第一個字元串。
string2
必需。規定要比較的第二個字元串。
PS:strcmp()函數與
strncmp()
函數類似,不同的是,strncmp()可以指定每個字元串用於比較的字元數。
二、PHP中strcasecmp()函數比較兩個字元串(不區分大小寫),其定義如下:
strcasecmp(string1,string2)
參數說明:
string1
必需。規定要比較的第一個字元串。
string2
必需。規定要比較的第二個字元串。
PS:strcasecmp()函數與
strncasecmp()
函數類似,不同的是,strncasecmp()可以指定每個字元串用於比較的字元數。
示例代碼:
<?php
$str1="碼農教程";
$str2="碼農教程";
$str3="www.jmanongjc.com";
$str4="www.jmanongjc.COM";
echo
strcmp($str1,$str2);//兩個字元串相等
echo
"<br/>";
echo
strcmp($str3,$str4);//注意該函數區分大小寫
echo
"<br/>";
echo
strcasecmp($str3,$str4);//該函數不區分大小寫
?>
結果:
";
echo
strcmp($str3,$str4);//注意該函數區分大小寫
echo
"
";
echo
strcasecmp($str3,$str4);//該函數不區分大小寫
?>
補充:關於返回值問題
針對參數string1與string2的比較:
如果兩個字元串相等,則返回值為
0
如果
string1
小於
string2,則返回值小於0
如果
string1
大於
string2,則返回值大於0
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

『陸』 PHP 中 創建對象 和實例化 有什麼區別

沒有區別,不同描述的用詞,創建對象強調的是創建之後的那個對象;實例化強調的是創建對象的動作。

『柒』 PHP 函數和類的區別是什麼

類要有關鍵字class聲明,類有屬性和方法構成,可以實例化出對象,類可以被繼承,一般類是面向對象編程時用到;函數沒有屬性,一般用在面向過程,未解決某一特定問題而寫的。

『捌』 ThinkPHP中實例化對象M和D的區別

ThinkPHP 中M方法和D方法都用於實例化一個模型類,M方法 用於高效實例化一個基礎模型類,而 D方法 用於實例化一個用戶定義模型類。

使用M方法

如果是如下情況,請考慮使用 M方法:

對數據表進行簡單的 CURD 操作而無復雜的業務邏輯時

只有個別的表有較為復雜的業務邏輯時,將 M方法 與實例化 CommonModel 類進行結合使用

M方法 甚至可以簡單看著就是對參數表名對應的數據表的操作:

$User=M('User');

使用D方法

如果是如下情況,請考慮使用 D方法:

需要使用 ThinkPHP 模型中一些高級功能如自動驗證功能(create()方法中實現)、關聯模型等

業務邏輯比較復雜,且涉及的表眾多

將業務邏輯定義在了自定義的模型類裡面(Lib/Model目錄下),而想在操作中實現這些業務邏輯

另外 D方法 不支持跨項目調用,需要使用:

$User=D('User','Admin');//實例化Admin項目下面的User模型
$User=D('Admin.User');//啟用了項目分組

提示

啟用了項目分組後,Model 類並不必然對應著項目分組。多個項目組之間共有的模型類,統一放在 Model 目錄下,可以直接使用D('ModelName') 實例化。而 D('User.UserInfo') 並不表示 User 一定是一個項目分組,也可以僅僅是對 Model 下文件的一個分類目錄,D('User.UserInfo') 實例化的是 User 目錄下的 UserInfo 模型類。

總結

M方法 和 D方法 都可以在模型類文件不存在的情況下直接使用的,但顯然 M方法 更高效;但要使用模型類裡面業務邏輯,就必須使用 D方法。

一個比較形象的比喻就是:M方法 就如一台剛裝好操作系統的電腦,只能使用一些基本功能;而 D方法 就如在裝好的系統上再安裝了一些如 Office、QQ 等應用軟體,功能更加強大,同時整個電腦運行速度也變慢了。

以上是對 M方法和D方法區別的一些總結,M方法 和 D方法 要根據實際情況來具體選擇。

『玖』 PHP中構造函數和方法有什麼區別

構造函數 在 新建一個對象的時候自動調用,方法是你主動調用的

閱讀全文

與php實例方法的區別相關的資料

熱點內容
dns使用加密措施嗎 瀏覽:172
php獨立運行 瀏覽:530
手機sh執行命令 瀏覽:727
雲伺服器的角色 瀏覽:733
單片機頻率比例 瀏覽:840
我的世界伺服器如何關閉正版驗證 瀏覽:504
如何查roid伺服器上的 瀏覽:130
安卓手機主板如何撬晶元不掉電 瀏覽:249
php各個框架的優缺點 瀏覽:101
php1100生成數組 瀏覽:359
以後做平面設計好還是程序員好 瀏覽:552
雲伺服器應用管理 瀏覽:438
飢荒雲伺服器搭建過程 瀏覽:186
可編程式控制制器優點 瀏覽:99
壓縮垃圾車說明書 瀏覽:28
五輪書pdf 瀏覽:802
單片機定時流水中斷系統流水燈 瀏覽:701
u8如何連接伺服器配置 瀏覽:68
動力在於緩解壓力 瀏覽:867
報考科一用什麼app 瀏覽:346