问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

PHP中this,self和static的区别

发布网友 发布时间:2022-04-21 19:10

我来回答

2个回答

热心网友 时间:2023-09-12 23:51

php中类操作有几个关键字,$this, self, static, parent

$this很好区别,就是实例化后的对象,所以不能在静态方法里调用

class testA{
    public $name="name";
    public static function test() {
        //出错! static方法不能使用this
        echo $this->name;
    }
}

self, static, parent  都是静态调用,后跟 ::  如果是变量,要加$

class testA{
    //属性也要定义成静态的,不然也是访问不了的
    public static $name="name";
    
    public $mobile="";
    
    public static function test() {
        //可以访问
        echo static::$name;
        
        //不可访问
        echo static::$mobile
    }
}

下面说一下三者区别

self  指代当前定义方法所在的类

static  后期静态绑定的类 ( 实际调用中是哪个类,就代表哪个类,不一定是方法定义所在的类 )

parent 这个也好区别,就是当前定义类的父类

class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        static::who(); // 后期静态绑定从这里开始
    }
}

class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test();

以上代码,输出   B

因为最后调用是从B 这个类调用的

class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        self::who();
    }
}

class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test();

以上代码,输出 A

因为调用who时指定了当前类,不管最终从哪里调用,都会调用到A里定义的方法

另外 ,这三个关键字可跟在new 后面,来实例化代表的类,就不用重复写类名,方便维护。

参考:php:后期静态绑定

学php可以多看看官方手册

下面我再简单解释下你发的代码。

你这个应该是thinkphp的model吧,init静态方法是model的初始化方法,是一个静态方法,主要用于勾子处理(事件绑定)。这个调用可以从thinkphp的model类中找到。

一般在定义方法时需要覆盖父类方法,都会调用一下  parent::method() 用于先执行父类的方法,除非特意屏蔽父类初始方法就不调用。

热心网友 时间:2023-09-12 23:52

var lottery={
index:-1,
count:0,
.........
init:function(id){

},
roll:function(){

}
};
简单,就是对整个页面的初始化。
再详细一点说,就是这样的写法是最近几年开始流行的json写法,把所有的function,所有的变量等,都用
var o = {
x: func,
y: "",
z: obj
}
这样的写法来写。而调用直接用o.x ;o.z()即可

<script type="text/javascript">
var obj={
count:0,
timer:0,
init:function(str){
alert("init调用:"+str);
},
exit:function(str){
alert("exit调用:"+str);
}
};
function someThing(){
obj.timer += 1;
obj.init('init');
obj.exit('exit');
alert(obj.timer)
}
window.onload=function(){
someThing();
}
</script>
之前项目的一段代码:
require([contextPath + '/js/assets/common.js'], function (common) {
require(['jquery', 'bootstrap', 'easyuiUtil','jqueryForm','layer'], function ($, bootstrap,
easyuiUtil,jqueryForm,layer) {
Namespace('taskinfo.taskinfoList', {
init: function () {//加载列数据
easyui.util.initDatagrid('#datagrid', {
url: contextPath + '/taskinfo/query',
columns:[[
{field:'name',title:'任务名称',width:120},
{field:'cron',title:'执行周期',width:80},
{field:'taskBeanId',title:'任务执行类名',width:80},
{field:'status',title:'状态',width:80,formatter: function(value,row,index){
if ('1'==value){
return "启用";
} else {
return "禁用";
}
}
},
{field:'createTime',title:'创建时间',width:80},
{field:'remarks',title:'备注',width:120}
]],
onDblClickRow: function (index,row) {
taskinfo.taskinfoList.editPage()
}

});
},
addPage: function () {
window.top.tempvalues = {};
var addwindow = window.top.layer.open({
type: 2,
area: ['1000px', '90%'],
skin: 'layui-layer-demo DB-style', //加上边框
title: '<div class="portlet-title"><div class="caption"><i class="blue fa fa-database"></i>添加任务</div></div>',
shadeClose: false,
content: contextPath + '/taskinfo/add',
});
window.top.tempvalues.callback = function(){
$("#datagrid").datagrid("reload");
window.top.layer.close(addwindow);
}
},
editPage: function () {
window.top.tempvalues = {};
var selected = $("#datagrid").datagrid("getSelected");
if(selected!=null){
var ewindow = window.top.layer.open({
type: 2,
area: ['1000px', '90%'],
skin: 'layui-layer-demo DB-style', //加上边框
title: '<div class="portlet-title"><div class="caption"><i class="blue fa fa-database"></i>添加任务</div></div>',
shadeClose: false,
content: contextPath + '/taskinfo/update/'+selected.id,
});
window.top.tempvalues.callback = function(){
$("#datagrid").datagrid("reload");
window.top.layer.close(ewindow);
}
}else{
layer.msg('请选择一个任务!');
}
},

changeStatus: function () {
var selected = $("#datagrid").datagrid("getSelected");
if(selected!=null){
$.post(contextPath + '/taskinfo/changeStatus/'+selected.id,
function (result) {
if (result.code == 200) {
$('#datagrid').datagrid('reload');
}
layer.msg(result.message);
}, 'json');
}else{
layer.msg('请选择一个任务!');
}
},
deleteTaskinfo: function () {
var selected = $("#datagrid").datagrid("getSelected");
if(selected!=null){
$.messager.confirm('信息提示', '确定要删除吗?', function (sure) {
if (!sure)
return;
$.post(contextPath + '/taskinfo/delete/'+selected.id,
function (result) {
if (result.code == 200) {
top.showInfo('删除成功!');
$('#datagrid').datagrid('reload');
} else {
top.showInfo('删除失败!');
}
}, 'json');
});
}else{
layer.msg('请选择一个任务!');
}
}
});
$(function () {
$("div.table-scrollable").heigh?gl.guwen.top#document.body).height()-140);
$(window).resize(function() {
$("div.table-scrollable").heigh?gl.guwen.top#document.body).height()-140);
});
taskinfo.taskinfoList.init();
});
});
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
离过年还有2个月,是找工作,还是等过年? 还有两个多月就过年了,我是现在找工作呢还是过完年再找呢?现在找工作是... i57300u处理器属于什么水平 i5-7300u处于什么水平 国家线2024考研分数线是多少 电脑软件使用记录如何查看电脑当天的使用记录 在哪里查电脑最近使用情况怎么查看笔记本电脑的使用记录 英语题急求 ...以前都是以1MB/s速度下载,但是现在都不到300K/s,是不是WiFi路由器... 我家4兆的网线1台电脑可是我今天测网速时却只有16KB/S 这是为什么啊 韩国街拍发型之沙宣短发波波头造型教你波波头怎么打理 韩系男生短发造型,引领男生发型潮流,你最喜欢哪一个 ob&gt;c和ogc~是什么意思? 湖南人“最喜爱”的露营大山阳明山,有什么著名的风景? 湖南人眼中的南华大学 湖南人怎么看待何炅? 湖南人为什么把槟榔看成是吉祥果? 电视频道这么多,但是有很多不是湖南人都会看芒果... 为什么湖南人长得都那么难看? 如何看待湖南人讨厌湖南卫视这件事呢? 湖南人怎么样 有什么样的性格特征 mysql 如何获取数据表中离当前日期最近的数据 mysql如何获取到每天的某一个特定时间段的数据 mysql查询怎么随机获取数据 mysql怎样高效率随机获取n条数据 MySQL 语句获取 节目列表中最新的单期数据 如何查看 mysql 表中最近更新的记录 mysql如何取得指定日期内的数据 MySQL数据查询获取数据 香皂花没味道了还能用吗? 短发怎么扎简单好看图解 韩式丸子头 php中self与static的区别是什么? PHP代码,能详细解释一下每行的意思么?多谢了 宋慧乔机场波波头短发装嫩,你觉得面庞圆润的的人... php 里面的=&gt;、-&gt; static self class 到底是什么? 男生额头高适合什么发型? php中self的真正含义是什么?为什么可以调用父类 ... 韩式明星发型,韩剧里面女主的发型有哪些? php中$this,static,final,const,self 等几个关... 那种短发带有刘海的有好自己打理的发型 那种发型叫... ibatis 怎么返回oracle游标 韩国女生发型怎样弄 php this和self的区别 python里的self是什麼意思 90后男生流行什么样的发型 如何在Python中使用static,class,abstract方法 短头发梳起来都有什么发型 短发发型绑扎方法大全 高手帮忙解释一下这个说的是什么意思 好看的短发款式有哪些? PHP类中的静态方法返回值,为什么要先判断该静态属...