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();
});
});