Metode non statis tidak dapat dipanggil secara statis php 8

Saat menambahkan Item Formulir di Formulir Tinjauan tetapi setiap kali saya menekan buat Item baru, ini menghasilkan kesalahan berikut
Permintaan Ajax gagal atau JSON yang tidak valid dikembalikan

Log kesalahan adalah
[Sabtu 04 Sep 17. 19. 06. 541109 2021] [php. peringatkan] [pid 15488] [klien 77. 111. 247. 81. 36185] Peringatan PHP. Mencoba mengakses array offset pada nilai tipe null di /var/www/html/plugins/themes/default/DefaultThemePlugin. termasuk. php pada baris 161
[Sabtu 04 Sep 17. 19. 06. 551453 2021] [php. kesalahan] [pid 15488] [klien 77. 111. 247. 81. 36185] Kesalahan fatal PHP. Kesalahan yang tidak tertangkap. ReviewFormElement metode non-statis. getMultipleResponsesElementTypes() tidak dapat dipanggil secara statis di /var/www/html/lib/pkp/controllers/grid/settings/reviewForms/form/ReviewFormElementForm. termasuk. php. 65\nPelacakan tumpukan. \n#0 /var/www/html/lib/pkp/controllers/grid/settings/reviewForms/ReviewFormElementsGridHandler. termasuk. php(185). ReviewFormElementForm->fetch()\n#1 /var/www/html/lib/pkp/classes/core/PKPRouter. termasuk. php(395). ReviewFormElementsGridHandler->buatReviewFormElement()\n#2 /var/www/html/lib/pkp/classes/core/PKPComponentRouter. termasuk. php(257). PKPRouter->_authorizeInitializeAndCallRequest()\n#3 /var/www/html/lib/pkp/classes/core/Dispatcher. termasuk. php(144). PKPComponentRouter->route()\n#4 /var/www/html/lib/pkp/classes/core/PKPApplication. termasuk. php(364). Dispatcher->dispatch()\n#5 /var/www/html/index. php(68). PKPApplication->execute()\n#6 {main}\n dilempar ke dalam /var/www/html/lib/pkp/controllers/grid/settings/reviewForms/form/ReviewFormElementForm. termasuk. php di baris 65,

Versi PHP adalah. PHP 8. 0. 5
OJS. 3. 3. 0. 4

Bisakah Anda membantu?

You misunderstand the meaning of inheritance : there is no duplication of members when you inherit from a base class. Members are shared through inheritance, and can be accessed by derived classes according to visibility (public, protected, private).

The difference between static and non static members is only that a non static member is tied to an instance of a class although a static member is tied to the class, and not to a particular instance.
That is, a static member is shared by all instances of a class although a non static member exists for each instance of  class.
_

Thus, in your example, the static property has the correct value, according to principles of object oriented conception.
class Base
{
  public $a;
  public static $b;
}

class Derived extends Base
{
  public function __construct()
  {
    $this->a = 0;
    parent::$b = 0;
  }
  public function f()
  {
    $this->a++;
    parent::$b++;
  }
}
_

$i1 = new Derived;
$i2 = new Derived;
_

$i1->f();
echo $i1->a, ' ', Derived::$b, "\n";
$i2->f();
echo $i2->a, ' ', Derived::$b, "\n";

outputs
1 1
1 2

Metode non-statis adalah metode yang dimiliki oleh instance kelas. Di semua versi PHP 7, memanggil metode non-statis secara statis sudah tidak digunakan lagi dan mengeluarkan peringatan (E_DEPRECATED)

Katakanlah kita memiliki kelas User dengan satu metode non-statis

Pengguna. php

<?php

class User
{
    public function saySomething(): void
    {
        echo 'Hello';
    }
}

Metode saySomething_ dipanggil secara statis tanpa membuat instance kelas

<?php

require_once 'User.php';

User::saySomething();
_

Di PHP 7, memanggil metode saySomething_ secara statis menghasilkan peringatan dan mencetak pesan Hello

Deprecated: Non-static method User::saySomething() should not be called statically in main.php on line 5
Hello

Sejak PHP 8. 0, tidak lagi memungkinkan untuk memanggil metode kelas non-statis secara statis. Ini menghasilkan kesalahan fatal

Saya baru saja mengalami kesalahan non-static method should not be called statically_ saat membangun beberapa fungsi untuk klien. Singkatnya, saya perlu membuat instance kelas yang saya gunakan sebelum menjalankan salah satu metode kelas tersebut. Lihat kode awal yang melontarkan kesalahan dan kode yang memperbaikinya di bawah

Kode salah yang melemparkan metode non-statis tidak boleh disebut kesalahan statis

$subscribers = ServiceClass::getSubscribers();

Kode yang benar yang memperbaiki kesalahan

$service = new ServiceClass();
$subscribers = $service->getSubscribers();
_

Dalam metode Text_Diff_Engine_shell::diff(), metode Text_Diff::_getTempDir() disebut statis, yang akan menyebabkan kesalahan fatal di PHP 8

Lihat. https. //3v4l. org/jRJK5

Meskipun ini adalah perpustakaan eksternal, ini tidak lagi dipertahankan secara eksternal, jadi perbaiki ini di Core dengan secara eksplisit mendeklarasikan metode Text_Diff::_getTempDir() sebagai static

Metode ini tidak menggunakan $this, jadi mengubahnya menjadi static aman dan sesuai dengan cara metode tersebut didokumentasikan

Cara menelepon non

statis. dan diri. panggilan identik dengan panggilan $this-> pada metode non-statis , dan meningkatkan keterbacaan. Pada contoh di atas, statis. foo() dan diri sendiri. panggilan foo() dapat dengan aman diganti dengan $this->foo() untuk meningkatkan keterbacaan karena foo bukan metode statis.

Bagaimana Anda memanggil non

Satu-satunya cara untuk memanggil metode non-statis dari metode statis adalah memiliki instance kelas yang berisi metode non-statis. By definition, a non-static method is one that is called ON an instance of some class, whereas a static method belongs to the class itself.

Bagaimana Anda memperbaiki non

Ada satu cara sederhana untuk memecahkan variabel non-statis yang tidak dapat dirujuk dari kesalahan konteks statis. Alamat variabel non-statis dengan nama objek . Sederhananya, kita harus membuat objek kelas untuk merujuk ke variabel non-statis dari konteks statis.

Cara memanggil non

php'; . }