it-swarm-id.com

Metode non-statis JUserHelper :: getProfile () tidak boleh disebut secara statis

Saya sedang refactoring beberapa kode dalam komponen yang lebih lama dan saya menemukan peringatan ini:

Strict standards: Non-static method JUserHelper::getProfile() should not be called statically, assuming $this from incompatible context 

$ userProfile = JUserHelper :: getProfile ($ userId);

Walaupun saya mengerti sifat teknis dari peringatan tersebut, karena getProfile tidak dideklarasikan static, JUserHelper adalah abstrak, jadi itu tidak dapat dipakai.

Anehnya semua metode lain di kelas didefinisikan sebagai static. Sepertinya bug dalam 2,5 bagi saya seperti dalam 3.x tanda tangannya berbeda.

Jadi apa cara yang tepat untuk mendapatkan profil?

5
Valentin Despa

Itu bug.

Ini diperbaiki selama pengembangan J3 sebagai bagian dari pembaruan platform pada 13-Jul-2012 c7c372.

Perubahan plaform dilakukan pada 3-Jul-2012 99b6ac PR1341 setelah awalnya meningkatkan item pelacak CMS 28633.

Kredit ke @valentin untuk meningkatkan bug 33717 dan memasok tambalan terhadap J2.5.

7
Peter Wiseman

Ya, itu kemungkinan adalah bug di versi 2.5. Fungsi getProfile () - di JUserHelper tidak digunakan di mana pun di joomla 2.5-distribusi, sehingga bug bisa tidak dijaga, saya kira. Untuk menggunakannya sebagaimana dideklarasikan sekarang, Anda harus mensubclass kelas JUserHelper, yang benar-benar tidak masuk akal.

4
jonasfh

Ini adalah bug, hilang statis http://prntscr.com/3hl3t1

dengan cetak statis di tempat

$userProfile = JUserHelper::getProfile(42);
print_r( $userProfile );

kembali

http://prntscr.com/3hl3x7

untuk sementara waktu Anda dapat menyalin fungsi dan menggunakannya seperti ini

function MygetProfile($userId = 0)
{
    if ($userId == 0)
    {
        $user   = JFactory::getUser();
        $userId = $user->id;
    }

    // Get the dispatcher and load the user's plugins.
    $dispatcher = JDispatcher::getInstance();
    JPluginHelper::importPlugin('user');

    $data = new JObject;
    $data->id = $userId;

    // Trigger the data preparation event.
    $dispatcher->trigger('onContentPrepareData', array('com_users.profile', &$data));

    return $data;
}
$userProfile = MygetProfile(42);
print_r( $userProfile );
3
Dan