Back to top

Autore Topic: Messaggio: Deprecated: Non-static method  (Letto 3386 volte)

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 32046
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Messaggio: Deprecated: Non-static method
« il: 29 Set 2016, 16:13:06 »
Con questa riga di codice nel file helper

Codice: [Seleziona]
if (!$appId) {
$_session = self::getmysession ();  <-- linea 72
$appId=$_session->get( 'datagrillappId');
}
Ottengo:

Deprecated: Non-static method datagrillHelper::getmysession() should not be called statically, assuming $this from incompatible context in ....../components/com_datagrill/helpers/datagrillhelper.php on line 72

Codice: [Seleziona]
public function getuserpermissions ()  {
$appId= datagrillhelper::retrieveID();    <-- linea 95
$possiblepermissions=parse_ini_file('xataface/permissions.ini');
$user = &JFactory::getUser();
foreach ($possiblepermissions as $permission=>$option) {
$asset='com_datagrill.application.'.(int) $appId;
$joomlapermission='datagrill.'.$permission;
if ($user->authorise($joomlapermission,$asset)){
$userpemissions[$permission]=1;
} else {
$userpemissions[$permission]=0;
}
}
return ($userpemissions);
}

Ottengo: Deprecated: Non-static method datagrillHelper::retrieveID() should not be called statically, assuming $this from incompatible context in ......../components/com_datagrill/helpers/datagrillhelper.php on line 95

In un altro file:

Codice: [Seleziona]
class conf_ApplicationDelegate {
   function getPermissions(&$record){
$perms= datagrillhelper::getuserpermissions(); <-- linea 4
return $perms;
   }
Ottengo: Deprecated: Non-static method datagrillHelper::getuserpermissions() should not be called statically, assuming $this from incompatible context in .........../components/com_datagrill/conf/ApplicationDelegate.php on line 4
Non riesco a trovare documentazione idonea a risolvere.
uso php V5.6.25

Chiedo anche se questo mi comporta il malfunzionamento della implementazione della aggiunta controllo ACL nel componente.

Grazie come sempre.

Offline MariaElenaBoschi

  • Appassionato
  • ***
  • Post: 469
    • Mostra profilo
Re:Messaggio: Deprecated: Non-static method
« Risposta #1 il: 29 Set 2016, 17:23:32 »
non so se dà problemi però non funziona sicuramente

 Non-static method datagrillHelper::getmysession() should not be called statically,
-------------------------------------------------------------------
vuol dire che puoi chiamare staticamente (::) solo metodi statici ovvero se vai a vedere la dichiarazione di getmysession sarà public function e non public static function.

Perchè sia corretto ti chiede che la classe datagrillHelper vada prima istanziata tipo $myhelper = newdatagrillHelper(); e poi $xxx = $myhelper->getmysession();
mancano 2 giorni alla mia prematura dipartita, saluti a tutti, meb.

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 32046
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Re:Messaggio: Deprecated: Non-static method
« Risposta #2 il: 29 Set 2016, 17:34:34 »
Questa l'intera classe:
Codice: [Seleziona]
public function retrieveID ($dgsetup=null){

// first try: get the appId from the parameters passed to this function

$datagrillsetup=$dgsetup['_datagrillsetup'];
$appId=$datagrillsetup['appId'];

// next try : get the appId from Joomla's session cookie

if (!$appId) {
$_session = self::getmysession ();
$appId=$_session->get( 'datagrillappId');
}

// next try: get the appId from Xataface's  config table

if (!$appId) {
$app = Dataface_Application::getInstance();
$conf= $app->conf();
$datagrillsetup=$conf['_datagrillsetup'];
$appId=$datagrillsetup['appId'];
}


// if still no appId -> error
if (!$appId) {
die ('Error initialising application: could not determine ID');
}
return $appId;
}

dove apporto le modifiche?

Offline MariaElenaBoschi

  • Appassionato
  • ***
  • Post: 469
    • Mostra profilo
Re:Messaggio: Deprecated: Non-static method
« Risposta #3 il: 29 Set 2016, 17:56:38 »
quello è un metodo non statico di una classe che però non vedo...

$_session = self::getmysession ();
--------------------------------------------------
quel self è una scorciatoia quando sei all'interno della classe statica per poter usare la classe stessa... ma se non è statica o non contiene il metodo statico...
« Ultima modifica: 29 Set 2016, 18:33:14 da MariaElenaBoschi »
mancano 2 giorni alla mia prematura dipartita, saluti a tutti, meb.

Offline tomtomeight

  • Global Moderator
  • Fuori controllo
  • ********
  • Post: 32046
  • Sesso: Maschio
  • Gli automatismi aiutano ma non insegnano nulla.
    • Mostra profilo
Re:Messaggio: Deprecated: Non-static method
« Risposta #4 il: 29 Set 2016, 19:01:12 »
Codice: [Seleziona]
public function getmysession () {
if (!isset($_mainframe)) {
$_mainframe = JFactory::getApplication('site');
$_mainframe->initialise();
}
$_session = JFactory::getSession();
return $_session;
}

e questo l'intero file allegato

Offline MariaElenaBoschi

  • Appassionato
  • ***
  • Post: 469
    • Mostra profilo
Re:Messaggio: Deprecated: Non-static method
« Risposta #5 il: 29 Set 2016, 19:20:32 »
quindi la classe che sarebbe meglio fosse statica ma in realtà non lo è è datagrillHelper e il metodo è getmysession();

staticamente chiameresti $session = datagrillHelper::getmysession();

altrimenti devi avere la classe caricata (usi un framework che dovrebbe avere l'autoload), istanziata e usata

$data = new datagrillHelper();
$session = $data->getmysession();

o se fosse nell'oggetto

$session = $this->getmysession();


static, public, private protected sono attributi di funzioni e classi che non sono opzionali, pena instabilità
« Ultima modifica: 29 Set 2016, 19:23:32 da MariaElenaBoschi »
mancano 2 giorni alla mia prematura dipartita, saluti a tutti, meb.

 



Web Design Bolzano Kreatif