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() 用于先执行父类的方法,除非特意屏蔽父类初始方法就不调用。
var lottery={
index:-1,
count:0,
.........
init:function(id){
},
roll:function(){
}
};
简单,就是对整个页面的初始化。
再详细一点说,就是这样的写法是最近几年开始流行的json写法,把所有的function,所有的变量等,都用
var o = {
x: func,
y: "",
z: obj
}
这样的写法来写。而调用直接用o.x ;o.z()即可
如
之前项目的一段代码:
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: '