Php 在静态方法中不在对象上下文中使用$this

Php 在静态方法中不在对象上下文中使用$this,php,this,Php,This,我为学校项目开发了一个网站,但我有一个错误,我不明白 我有一个抽象类和一个子类。抽象类实现了一个接口,所以我可以在子类中使用静态方法 子类使用的控制器 控制器: // CODE HERE case "modifier" : $titre = "Modifier un bookmark"; /* on vérifie que l'URL nous a bien transmis l'identifiant */ if (isset($_GET['id'])) {

我为学校项目开发了一个网站,但我有一个错误,我不明白

我有一个抽象类和一个子类。抽象类实现了一个接口,所以我可以在子类中使用静态方法

子类使用的控制器

控制器:

// CODE HERE
case "modifier" :
    $titre = "Modifier un bookmark";
    /* on vérifie que l'URL nous a bien transmis l'identifiant */
    if (isset($_GET['id'])) {
        $id = $_GET['id'];
        /* créer un bookmark à partir des infos de la BD */
        $jeu = Jeu_Bd::lire($id);
        /* afficher le formulaire */
        $form = new Jeu_Form($jeu);
        $c = $form->makeForm(PUBLIC_URL . "index.php?a=enregistrermodif", "modifier");
    } else {
        /* on ne peut pas effectuer de modification s'il n'y a pas d'identifiant */
        $c = "Il manque un id.";
    }
    break;
case "enregistrermodif":
    $titre = "Jeu enregistré";
    /* créer un bookmark à partir des infos du formulaire et des infos de la BD */
    Outils_Chaines::htmlEncodeArray($data);
    $jeu = Jeu_Bd::lire($data['id']);
    echo(" Nom : " . $jeu->getNomJeu() . "<br/> ID : " . $jeu->getId() . "<br/> Date de Sortie : " . $jeu->getDateSortie());
    $jeu->update($data);
    echo gettype($jeu);
    $form = new Jeu_Form($jeu);
    /* si le formulaire est valide */
    if ($form->verifier()) {
        /* alors enregistrer le bookmark */
        Jeu_Bd::enregistrerModif($jeu);
        $ui = new Jeu_Ui($jeu);
        $c = $ui->makeHtml();
    } else {
        /* sinon re-afficher le formulaire */
        $c = $form->makeForm(PUBLIC_URL . "index.php?a=enregistrermodif", "modifier");
    }
    break;
// CODE HERE
抽象类:

abstract class AbstractCRUD implements IAbstractCRUD
{
    abstract protected function __construct($map);
}
子类:

class Jeu extends AbstractCRUD
{
// CODE HERE
 protected function __construct($map)
{
    /* affectation des valeurs contenues dans le tableau $map */
    $this->id = $map['id'];
    $this->nomJeu = $map['nomJeu'];
    $this->description = $map['description'];
    $this->dateSortie = $map['dateSortie'];
}
 public static function initialize($data = array())
{
    /* créer le tableau de map*/

    /* id présent dans $data on non ? */
    if (isset($data['id'])) {
        $map['id'] = $data['id'];
    } else {
        $map['id'] = "";
    }

    /* titre présent dans $data ? */
    if (isset($data['nomJeu'])) {
        $map['nomJeu'] = $data['nomJeu'];
    } else {
        $map['nomJeu'] = "";
    }

    /* description présent dans $data ? */
    if (isset($data['description'])) {
        $map['description'] = $data['description'];
    } else {
        $map['description'] = "";
    }

    /* dateSortie présent dans $data ? */
    if (isset($data['dateSortie'])) {
        $map['dateSortie'] = $data['dateSortie'];
    } else {
        $map['dateSortie'] = "";
    }

    /*retourner une instance de Jeu*/
    return new self($map);
}
 public static function update($data)
{
    /* titre présent dans $data ? */
    if (isset($data['nomJeu'])) {
        $this->setNomJeu($data['nomJeu']); ------> ERROR HERE (Fatal error: Using $this when not in object context) <------
    }

    /* dateSortie présent dans $data ? */
    if (isset($data['dateSortie'])) {
        $this->setDateSortie($data['dateSortie']);
    }

    /* description présent dans $data ? */
    if (isset($data['description'])) {
        $this->setDescription($data['description']);
    }
}
// CODE HERE
类Jeu扩展了AbstractCRUD
{
//代码在这里
受保护函数构造($map)
{
/*装模作样地装模作样地展示画面$地图*/
$this->id=$map['id'];
$this->nomJeu=$map['nomJeu'];
$this->description=$map['description'];
$this->dateSortie=$map['dateSortie'];
}
公共静态函数初始化($data=array())
{
/*地图画面*/
/*id pré发送了dans$非官方数据*/
如果(isset($data['id'])){
$map['id']=$data['id'];
}否则{
$map['id']=“”;
}
/*titre pré发送了dans$数据*/
如果(isset($data['nomJeu'])){
$map['nomJeu']=$data['nomJeu'];
}否则{
$map['nomJeu']=“”;
}
/*说明pré发送了dans$数据*/
if(isset($data['description'])){
$map['description']=$data['description'];
}否则{
$map['description']=“”;
}
/*dateSortie pré发送了dans$数据*/
如果(isset($data['dateSortie'])){
$map['dateSortie']=$data['dateSortie'];
}否则{
$map['dateSortie']=“”;
}
/*重新审理案件*/
返回新的self($map);
}
公共静态函数更新($data)
{
/*titre pré发送了dans$数据*/
如果(isset($data['nomJeu'])){
$this->setNomJeu($data['nomJeu']);------>此处错误(致命错误:在不在对象上下文中时使用$this)setDateSortie($data['dateSortie']);
}
/*说明pré发送了dans$数据*/
if(isset($data['description'])){
$this->setDescription($data['description']);
}
}
//代码在这里
我是php新手,我不知道如何解决这个问题。我已经阅读了静态方法的原因

当我执行echo$jeu->getNomJeu()时,我得到了我想要的东西,为什么我不能使用$this?

来自:

使用$this引用当前对象。使用self引用当前类。换句话说,对于非静态成员使用$this->member,对于静态成员使用self::$member

发件人:

使用$this引用当前对象。使用self引用当前类。换句话说,对于非静态成员使用$this->member,对于静态成员使用self::$member


对于静态方法/属性,您应该使用self

echo self::getNomJeu();

对于静态方法/属性,您应该使用self

echo self::getNomJeu();

请先阅读,然后再阅读。手册中已对此进行了说明。我已解决了我的问题。我已将
公共静态函数更新($data);
(接口)放入抽象类
抽象函数更新($data)
。请先阅读,然后再阅读。手册中有详细说明。我已经解决了我的问题。我已将
公共静态函数更新($data);
(接口)放入抽象类
抽象函数更新($data);