PHP中self::和$this->的区别是什么?
时间: 2023-04-06 08:02:50 浏览: 106
self::和$this->都是用来访问类的属性和方法的,但是它们的作用域不同。self::是用来访问当前类的静态属性和方法,而$this->是用来访问当前对象的属性和方法。所以,如果要访问静态属性和方法,应该使用self::,如果要访问对象的属性和方法,应该使用$this->。
相关问题
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\DB; class WebModel extends Model { /** * Create a new Eloquent model instance. * * @param array $attributes */ public function __construct() { $this->setTable('pms_web'); parent::__construct(); } const STATUS_NORMAL = 1; //正常 const STATUS_FREEZE = 2; //冻结 public static function Enum($sign = "") { $status = [ 'status' => [ self::STATUS_NORMAL, self::STATUS_FREEZE ] ]; return isset($status[$sign]) ? $status[$sign] : $status; } public function WebDb() { return DB::table($this->getTable(),'w'); } public function FindOne($content, $param = "id") { $result = $this->WebDb()->where($param, $content)->select(DB::raw('id'))->first(); if (empty($result)) { return ''; } return $this->FormatOne($result); } public function FindList($params) { $query = $this->WebDb(); $query->select( DB::raw('SQL_CALC_FOUND_ROWS id') ); $query->limit($params['per_page']); $query->offset($params['offset']); $query->orderByDesc('w.id'); $result = $query->get(); $return_result = array( 'total' => 0, 'data' => [], ); if (empty($result)) { return $return_result; } $fromat_result = $this->FormatList($result); $total = DB::select("select FOUND_ROWS() as num")[0]->num; return [ 'total' => $total, 'data' => $fromat_result, ]; } public function FormatList(&$result) { foreach ($result as $v) { $this->FormatOne($v); } return $result; } public function FormatOne(&$result) { return $result; } public function simpleSave($data, $where = []) { } }
这是一个 PHP 代码段,是 Laravel 框架中的一个 Model 类。该类继承自 `Illuminate\Database\Eloquent\Model` 类,用于处理 `pms_web` 表的数据操作。这个 Model 类中定义了一些静态常量和方法,用于返回状态码、查询数据等。在 `FindOne` 方法中,使用 `$this->WebDb()` 方法获取 `pms_web` 表的查询构造器,根据传入的 `$content` 和 `$param` 构建查询条件,查询并返回符合条件的数据。在 `FindList` 方法中,通过 `$query->select(DB::raw('SQL_CALC_FOUND_ROWS id'))` 方法查询总记录数,并通过 `FOUND_ROWS()` 函数获取总记录数,返回数据列表和总记录数。在 `simpleSave` 方法中,还定义了一个空方法,用于保存数据。
public static function getFriendSupply($fmid,$mid){ $where = ['mid' => $fmid, 'status' => 1]; //用户发布屏蔽了我的供需 $excludesMids = Db::name('supply_excludes') ->alias('a') ->join('supply b','a.supply_id = b.id') ->where('a.mid',$mid) ->where('b.mid',$fmid) ->column('b.id'); $whereSql = ""; if($excludesMids){ $excludesMidsStr = implode(',',$excludesMids); $whereSql.=" id not in ($excludesMidsStr)"; } $list = self::getQueryList($where,'',1,2); $list = self::_formatList($list); return $list; }转换chengjava
请注意,上述代码片段是PHP代码,而不是Java代码。要将其转换为Java代码,你需要进行逐行的语法转换和逻辑重写。以下是一个可能的Java代码转换版本:
```java
import java.util.ArrayList;
import java.util.List;
public class MyClass {
public static List<Supply> getFriendSupply(int fmid, int mid) {
List<Supply> list = new ArrayList<>();
// 构建查询条件
SupplyQuery query = new SupplyQuery();
query.setMid(fmid);
query.setStatus(1);
// 用户发布屏蔽了我的供需
List<Integer> excludesMids = getExcludesMids(mid, fmid);
if (excludesMids != null && !excludesMids.isEmpty()) {
query.setExcludesMids(excludesMids);
}
// 调用查询方法获取结果列表
list = getQueryList(query, 1, 2);
// 格式化结果列表
list = formatList(list);
return list;
}
private static List<Integer> getExcludesMids(int mid, int fmid) {
List<Integer> excludesMids = new ArrayList<>();
// 执行查询逻辑并将结果添加到excludesMids列表中
return excludesMids;
}
private static List<Supply> getQueryList(SupplyQuery query, int page, int pageSize) {
List<Supply> list = new ArrayList<>();
// 执行查询逻辑并将结果添加到list列表中
return list;
}
private static List<Supply> formatList(List<Supply> list) {
// 格式化结果列表的逻辑
return list;
}
}
public class Supply {
// 定义供需类的属性和方法
}
public class SupplyQuery {
private int mid;
private int status;
private List<Integer> excludesMids;
// 定义查询类的属性和方法
public void setMid(int mid) {
this.mid = mid;
}
public void setStatus(int status) {
this.status = status;
}
public void setExcludesMids(List<Integer> excludesMids) {
this.excludesMids = excludesMids;
}
// 其他getter和setter方法
}
```
请注意,上述代码仅为示例,可能需要根据你的具体需求进行调整。还需根据实际情况实现查询逻辑和格式化逻辑。