session_start () bir nesne olmayan bir nesne haline neden oluyor

1 Cevap php

Ben diğer sınıfları yüklemek ve örneklerini oluşturmak için bir işleve sahip bu sınıf var.

Böyle bu sınıf kullanıldığında:

    $test = new test();
   $test->load("email");

it works perfectly as expected but when using session_start();

$test = new test();
session_start();
$test->load("email");

an error is created and nothing else is there: PHP Fatal error: Call to a member function load() on a non-object in bla bla bla

session_start ile kullanılan sınıf:

<?php

 class test
{


 function load($class){

  static $objects = array();

  if (isset($objects[$class]))
  {
   return $objects[$class];
  }

  require('libraries/'.$class.'.php');

  $name = 'ext_'.$class;

  $objects[$class] =& new $name();

  $this->$class = $objects[$class];

  return $objects[$class];


 }

}


$test = new test();

session_start();

$test->load("email");
?>

ve burada kütüphaneler / email.php olduğunu:

<?php


class ext_email
{

 function ext_email(){
         echo "email is working";
 }

}

?>

can you please advice what is wrong with this? a way to improve the load function? this thing works on some installations of apache and fail to work on others. depending on some configs that I don't know what exactly is it..

I want to be able to do the following: $test = new test();

session_start();

$test->load("email");

teşekkürler şimdiden bir sürü

1 Cevap

Belki test $_SESSION adlandırılmış bazı değişken ve register_globals etkin?

Bu durumda, $_SESSION['test'] değişkeni, varolan herhangi bir $test değişkeni ı iptal session_start() için çağrı, küresel bir $test değişken olarak oluşturulur Senaryonuzun.

Bu bazı sunucularda değil, bazı diğerleri neden oluyor bu da açıklamak istiyorum: register_globals Off varsayılan - ve uzun yıllar olmuştur, ama bazı bilgisayarlar bu etkin tutmak: - (

(When people say register_globals kötülük, o) ... iyi bir neden olmadan değil


For more informations, you can read the
Using Register Globals page of the manual -- there is even a paragraph about $_SESSION and some problems that register_globals can cause.


Now, on how to fix this... Well, I suppose the fastest way would be to make sure that session_start() is called before you set $test to what you want it to be :

session_start();
$test = new test();
$test->load("email");

Bu şekilde, bile $test, çünkü register_globals, değişken onu geçersiz kılacaktır oluşturulur - ve sonuncusu ^ ^ doğru biridir

But the best solution would be to turn register_globals Off : that's a reliquate from the past... That should probably never have existed :-(
(There are some bad things in PHP ; that's one of them, in my opinion)