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...