ThinkPHP中_initialize()和__construct()的不同
随风飘扬 php 2016年07月11日13:53 1997
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函
ThinkPHP中_initialize()和__construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢?
虎bbe泰vb克jcgax新unyl闻vskg网cio版权所有,请勿未授权转载!!!
虎llcp泰avrpp克gy新ayi闻u网ok版权所有,请勿未授权转载!!!
在网上搜索,很多答案是两者是一样的,ThinkPHP中_initialize()相当于php的__construct(),这么说是错误的,如果这样,tp为什么不用__construct(),而要自己弄一个ThinkPHP版的_initialize()构造函数呢?
虎r泰lbxkn克gqh新wlxu闻n网hjvwx版权所有,请勿未授权转载!!!
虎s_泰mcq克vtf新iohz闻egmi网n_版权所有,请勿未授权转载!!!
自己试一下就知道两者的不同了。
虎cl泰yng克bhg新dvemv闻tp_i网bs版权所有,请勿未授权转载!!!
虎v_ukm泰ccan克d新vtsg闻cutdf网mc版权所有,请勿未授权转载!!!
a.php
虎p泰ce克l_新nbgnx闻wxkc网pbvd版权所有,请勿未授权转载!!!
class a{
虎h泰a克izl新rhnv闻v_s网bst版权所有,请勿未授权转载!!!
function __construct(){
虎tegd泰e克il_rw新owq闻g网ryuqs版权所有,请勿未授权转载!!!
echo 'a';
虎tvg泰zazq克xso新ojn_闻ddmas网n版权所有,请勿未授权转载!!!
}
虎v泰ppa克upj新_ul闻hw网o版权所有,请勿未授权转载!!!
}
虎eiej泰q克c新cpwiw闻btln网mky版权所有,请勿未授权转载!!!
b.php(注意:这里构造函数没有调用parent::__construct();)
虎o泰q克phumv新dkywe闻erj网bzmzf版权所有,请勿未授权转载!!!
include 'a.php';
虎bne泰osz克xqr新l闻se网qihc版权所有,请勿未授权转载!!!
class b extends a{
虎vojh泰b克ymc新ipf闻j网gj版权所有,请勿未授权转载!!!
function __construct(){
虎vttmh泰ukcan克zo新dwqlh闻b网zh版权所有,请勿未授权转载!!!
echo 'b';
虎n_fez泰v克iitm新ebml闻apc网cbur版权所有,请勿未授权转载!!!
}
虎dk泰fdzcp克txtf新bus闻k网a版权所有,请勿未授权转载!!!
}
虎nnz泰ovk克iuo_新kcw闻yxmiz网mfe版权所有,请勿未授权转载!!!
虎zyq_泰l克brk新sq闻czt网n版权所有,请勿未授权转载!!!
$test=new b();
虎sbo泰bpbgq克ka新kl闻iwhqa网fz版权所有,请勿未授权转载!!!
运行结果:
虎ajczz泰f克os新dhnbx闻ais网oa版权所有,请勿未授权转载!!!
b
虎b_dv泰n克tc新zqvo闻d网ng版权所有,请勿未授权转载!!!
虎e泰b_p克__iew新_rvi闻ufk网od版权所有,请勿未授权转载!!!
可见,虽然b类继承了a类,但是输出结果证明程序只是执行了b类的构造函数,而没有自动执行父类的构造函数。
虎wit_g泰unxck克sswo新sm闻_zyo网gaee版权所有,请勿未授权转载!!!
虎sqels泰xjvxn克uqfrb新tqwbw闻xynv网eedw版权所有,请勿未授权转载!!!
如果b.php的构造函数加上parent::__construct(),就不同了。
虎fil泰xgg克fww新snqr闻gasvc网bfoy版权所有,请勿未授权转载!!!
include 'a.php';
虎vqtf泰_e克pjv新xkj闻ive网jxtf版权所有,请勿未授权转载!!!
class b extends a{
虎lpyh泰mghm克juji新tzfnc闻xdlal网znfgd版权所有,请勿未授权转载!!!
function __construct(){
虎kwk泰k克lpmg新k闻rb_w网qhu版权所有,请勿未授权转载!!!
parent::__construct();
虎fir泰ye克_iy新gz闻ifr网k版权所有,请勿未授权转载!!!
echo 'b';
虎eyzy泰zjoun克w新d闻ci网pmaqw版权所有,请勿未授权转载!!!
}
虎qorbu泰yjyho克r新unig闻nbac网ohkl版权所有,请勿未授权转载!!!
}
虎cm泰keov克hrtt新erbo闻f网ynx版权所有,请勿未授权转载!!!
虎yvuky泰v克dgr新eveim闻twyg网_yf版权所有,请勿未授权转载!!!
$test=new b();
虎fwuu泰z克qu新zgwd闻b网xuyf_版权所有,请勿未授权转载!!!
那么输出结果是:
虎n泰mt_克wt新bd闻f_网nnzpq版权所有,请勿未授权转载!!!
ab
虎mhtsl泰sp克yqj新k闻yvoh网j版权所有,请勿未授权转载!!!
虎hm泰wd克g新sqzm闻o网g版权所有,请勿未授权转载!!!
此时才执行了父类的构造函数。
虎imbhq泰ks克keqf新l闻mnwg网q版权所有,请勿未授权转载!!!
虎gnzdd泰pjx克s新uhgom闻o网x版权所有,请勿未授权转载!!!
我们再来看看thinkphp的_initialize()函数。
虎abeq泰ge克jgrkr新qbcrd闻d网p版权所有,请勿未授权转载!!!
虎dhja泰vth克um新isc闻u网vy版权所有,请勿未授权转载!!!
BaseAction.class.php
虎e_kik泰sredm克ss新ecveh闻i网k版权所有,请勿未授权转载!!!
class BaseAction extends Action{
虎lfr泰f克e新gibss闻c网vghus版权所有,请勿未授权转载!!!
public function _initialize(){
虎dgyn泰hptl克kxlt新i闻yzdp网jte版权所有,请勿未授权转载!!!
echo 'baseAction';
虎hlrlm泰snl克hrxu新p_owc闻kjwel网tcpq版权所有,请勿未授权转载!!!
}
虎jwffr泰rosn克tj新y闻rio网dqeb版权所有,请勿未授权转载!!!
}
虎b泰b克la新gh闻ganr网vxw版权所有,请勿未授权转载!!!
虎hl泰azo克ies新pllaj闻yk网vnbph版权所有,请勿未授权转载!!!
IndexAction.class.php
虎abh泰zlizw克ktdyv新i闻sd网esgcb版权所有,请勿未授权转载!!!
class IndexAction extends BaseAction{
虎ged泰vui克tinf新o闻cqpsd网a版权所有,请勿未授权转载!!!
public function (){
虎knh泰qb克gmmw_新ncw闻sgrzg网cefzr版权所有,请勿未授权转载!!!
echo 'indexAction';
虎_泰wrttp克btqm新wzni闻fo网zz版权所有,请勿未授权转载!!!
}
虎eya泰_ifdd克bku新qefb闻akkdj网rx版权所有,请勿未授权转载!!!
}
虎uhl泰fq克prjs_新t闻hpfd网fvcgn版权所有,请勿未授权转载!!!
虎xp泰hsu克tqp_新d_闻pom_r网m版权所有,请勿未授权转载!!!
运行Index下的index方法,输出结果:
虎itq泰b克i新zdn闻mhhjp网zkgi版权所有,请勿未授权转载!!!
baseActionindexAcition
虎wgi_s泰qdwqm克ca新s闻swza网fsp版权所有,请勿未授权转载!!!
虎aklpo泰rp克h新td闻avo网mir版权所有,请勿未授权转载!!!
可见,子类的_initialize()方法自动调用父类的_initialize()方法。而php的构造函数__construct(),如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct();
虎e泰srrh克q新v闻afp网u_qs版权所有,请勿未授权转载!!!
虎rqwdj泰za克jk新lbw闻emuh网bmyqx版权所有,请勿未授权转载!!!
这就是ThinkPHP中_initialize()和__construct()的不同。
虎r泰xsewm克zbdy新tv闻p_rbd网cq版权所有,请勿未授权转载!!!
Bản phát biểu: tất cả các bản vẽ được in trên trang web là để truyền thêm thông tin và dễ dàng thảo luận, không có nghĩa là website, máy chủ và người cầm đầu đồng ý ý kiến của họ hoặc xác nhận tính xác thực của nội dung của họ. Nội dung các bài báo chỉ có liên quan. Nếu quyền của tác giả gốc bị vi phạm, xin liên lạc với quản trị website.
Ghi chú
-
Không có dữ liệu