php 直接用類名 和 new例項化 呼叫函式哪種方法效率更高?

2025-05-13 14:40:13 字數 3533 閱讀 5313

1樓:匿名使用者

1.首先用法不同,__new__(用於建立例項,所以該方法是在例項建立之前被呼叫,它是類級別的方法,是個靜態方法;

而 __init__(用於初始化例項,所以該方法是在例項物件建立後被呼叫,它是例項級別的方法,用於設定物件屬性的一些初始值。

氏指由此可知,__new__(在__init__(之前被呼叫。如果__new__(建立的是當前類的例項,會自動呼叫__init__(函式,通過return呼叫的__new__(的引數cls來保證是當前類例項,如果是其他類的類名,那麼建立返回的是其他類例項,就不會呼叫當前類的__init__(函式。

2.其次傳入引數不同。

new__(至少有乙個引數cls,代表當前類,此引數在例項化時由python直譯器自動識別;

init__(至少有乙個引數self,就是這個__new__(返回的例項,__init__(在__new__(的基礎上完成一些初始化的操作。

3.返回值不同。

new__(必須有返回值,返回例項物件;

init__(不需要返回值。

另外談談__new__(的作用,__new__(方法主要用於繼承一些不可變的class,比如int, str, tuple, 提供乙個自定義這些類的例項化過程的途徑,一般通過過載__new__(方法來實現。**如下。

另外__new__(方顫核告法還可以用來實現單例模式,也就是使茄明每次例項化時只返回同乙個例項物件。

2樓:陽光上的橋

呼叫的時候效率幾乎沒有區別,如果只是呼叫一下靜態方法,那麼例項化乙個物件的操作略顯浪費資源。

php 乙個函式效率高 還是乙個類 效率? 哪個好

3樓:網友

從效率上來說,直接寫乙個函式要比寫乙個類的執行效率要高,因為類的話編譯時候還要考慮例項化、繼承、公有私有等等一大堆物件導向的機制,執行效率自然會比函式低。

但是,對於人類來說,物件導向簡化了很多邏輯,因此會方便你寫**。

寫**就是這樣,要麼你累一點計算機就輕鬆一點,要麼你輕鬆了,計算機就累了!

4樓:網友

都差不多吧。類方法實質上就是函式,類裡面可以包括多個具有相同或相似性質的函式,個人感覺類就是把多個函式封裝在一起。

5樓:網友

說真的,php程式設計式寫的人水平高,誰就高!

php呼叫類中的函式 與 直接呼叫函式 效能區別

6樓:網友

直接呼叫函式的效能肯定好一些,如果自己定義類,類中的函式必須例項化成物件後才能使用,多了轉換的時間。

php 反射類和例項化類效率哪個高

7樓:莘贍

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

8樓:勇敢的

當然是 例項化更效率。

關於php靜態方法呼叫和例項化類呼叫的區別

9樓:小美小亮

語法的區別,通過類名只能呼叫靜態方法。

呼叫例項化方法需要先new乙個例項。

php中有關new的用法 一般new後面直接跟類名就可以了,我看到下面的一段**為什麼new 後面還跟帶$符號變數

10樓:網友

根據$souji傳入的字串來生成新物件。

比如$souji的值為"nokia",這句就等於$souji=new nokia();

值為"moto",就等於$souji=new moto();

可以理解成乙個不完整的「工廠模式」

11樓:我不知道你不知

這是php的乙個特性,函式,類、類方法都可以這樣呼叫,直譯器或自動找尋匹配的函式、類以及類方法呼叫。可以說是php比較靈活的乙個特性。

執行下面的**試試。

func = 'hello';

func();

function hello()

你貼出來的**,是通過蹩腳的辦法試圖實現乙個工廠方法,但是他這個**設計是不太好的。

12樓:網友

這個變了是乙個類的名稱。這裡的目的是想做到動態例項化例如:$a = 'aa';

b = 'bb';

yongsouji($a);

yongsouji($b);

這樣就先後例項化了'aa'類和'bb'類。

你理解了嗎。

php中既然可以直接用類名呼叫類中的方法和屬性,那還宣告物件幹嘛? 這不是多此一舉嗎?

13樓:小小幽魂

你的寫法是 php 4 格式,只是php在向下相容罷了。。

類方法的靜態呼叫問題。。你是想知道,即然可以靜態呼叫,為什麼還要例項化物件。

從使用的角度來說,區別在於。這是乙個物件。還是乙個類。主要是思路上的區別。從書寫的角度來說,也是各有優缺點。。

正如你看到的,靜態呼叫可以省去例項化,而且全域性有效。但是用起來,更像是自定義函式。很難體現出 oop 思想所在。

例項化之後的變數是乙個物件,有明確的方法和屬性。從程式設計思路上來說更清晰。

如果你只是以這麼簡單的**來舉例,感覺當然都一樣。那麼我舉個例子。

mysql = new db_mysql();//例項化乙個mysql物件。

rows = $mysql->table('test')->select();//mysql 物件查詢乙個表資料。

mysql->debug();// mysql 列印錯誤資訊。

以上**全是 mysql 物件在操作。。

如果用全靜態化的方法寫。就得這麼寫:

db_mysql::table('test'); //設定乙個資料表,是誰在控制。

rows = db_mysql::select();//查詢資料,誰在查?

db_mysq::debug();//列印錯誤資訊,錯誤資訊是誰發出來的?

以上**物件完全不清晰。只知道是 mysql 的一些功能。

你還覺得這麼寫方便麼?而且**長起來會更混亂。思路都已經有些混亂了。如果你試著封裝這麼乙個類,你會覺得更麻煩。

14樓:網友

不是所有的方法都可以這樣的,必須是用static宣告的方法才能用one::get()來呼叫,像你上面說的的是不能這樣呼叫的!!

php直接呼叫函式和呼叫另外乙個檔案中的函式的區別

15樓:匿名使用者

//如果是php檔案中的函式,唯一的區別是:先引入外部檔案,然後直接呼叫。

如果是外部類檔案中的函式,需要引入,然後new 物件後,再呼叫該物件的函式。

msg=test_msg();

function test_msg()

呼叫外部檔案中的函式。

首先引入檔案。

include_once '';

msg=test_msg();

function test_msg()

PHP類裡賦值一般用哪個函式,如何分辨

construct 通常構造方法被用來執行一些有用的初始化任務,如對成員屬性在建立物件時賦予初始值。構造方法的在類中的宣告格式 function constrct 引數列表 get 這個方法用來獲取私有成員屬性值的,有一個引數,引數傳入你要獲取的成員屬性的名稱,返回獲取的屬性值,這個方法不用我們手工...

java定義方法,引數為另外類的類名和物件

class student public void showstudent student student 類似這樣來 把,這時源你可以把baistudent看成一個du資料型別但是準確來說是一 zhi個類 student代表 daostudent類的一個變數 這樣就能訪問student中的資料了 ...

用js寫根據類名獲取html標籤物件的方法

取得對應類和標籤的html元素 clsname 給定類名 tagname 給定的html元素,如果為任意 tagname function getelementsbyclassname clsname,tagname return classelements function getelementb...