класс отключается при включении smarty и facebook php - PullRequest
0 голосов
/ 07 апреля 2011

Я не понимаю этого:

Я использую функцию __autoload в php, и это работает:

include_once '../sys/core/init.inc.php';

$Intro = new Intro(); 
echo $Intro->ip(); 
exit(); 

init.inc.php загружает класс Intro и ip()Функция распечатывает IP.

Но это не работает

include_once '../sys/core/init.inc.php';

/*
 * Smarty template engine
 */

include_once '../sys/core/smarty/Smarty.class.php'; 

$smarty = new Smarty;
$smarty->debugging = false;
$smarty->caching = false;
$smarty->cache_lifetime = 86400; // 24 timer

/*
 * gettext translation
 */

if( ! defined('PROJECT_DIR')){ define('PROJECT_DIR', realpath('/var/www/v3/')); }   
if( ! defined('LOCALE_DIR')){ define('LOCALE_DIR', PROJECT_DIR .'/sys/locale'); }
if( ! defined('DEFAULT_LOCALE')){ define('DEFAULT_LOCALE', 'no_NO'); }
include_once('../sys/core/gettext/gettext.inc');
$encoding = 'utf-8';
$locale = (isset($_COOKIE['lang']))? $_COOKIE['lang'] : DEFAULT_LOCALE;
T_setlocale(LC_MESSAGES, $locale);
$domain = 'messages';
T_bindtextdomain($domain, LOCALE_DIR);
T_bind_textdomain_codeset($domain, $encoding);
T_textdomain($domain);

/*
 * facebook
 */

include_once '../sys/core/facebook/facebook.php';

// Create our Application instance (replace this with your appId and secret).
// Create our Application instance.
$facebook = new Facebook(array(
  'appId' => 'xxx',
  'secret' => 'xxx',
  'cookie' => true,
)); 

$session = $facebook->getSession();

$me = null;
// Session based API call.
if ($session) {
  try {
    $uid = $facebook->getUser();
    $me = $facebook->api('/me'); // me?fields=email
    $email = $facebook->api('me?fields=email');

  } catch (FacebookApiException $e) {
    error_log($e);
  }
}

// login or logout url will be needed depending on current user state.
if ($me) {
  $logoutUrl = $facebook->getLogoutUrl();
} else {
 $loginUrl = $facebook->getLoginUrl(
        array('req_perms' => 'email, publish_stream')
    );
}

$Intro = new Intro(); 
echo $Intro->ip(); 
exit(); 

Теперь я получаю Fatal error: Class 'Intro' not found in ... on line 92

Я не понимаю этого, потому что требуется только добавленный код, включающий для facebook, gettext и smarty.До включений я могу вызывать классы, но не после добавления включений.Это не имеет смысла быть.Может кто-нибудь объяснить.

Ответы [ 2 ]

0 голосов
/ 07 апреля 2011

Это простое предположение, я давно не использовал эти библиотеки (за исключением Smarty), но, возможно, одна из библиотек (Facebook или Gettext) также определяет функцию __autoload, которая вызывается вместо свой собственный.

Вы можете отобразить то, что используется PHP для автозагрузки, вызвав var_dump(spl_autoload_functions()).

Кроме того, ваша функция автозагрузки может использовать константу или переменную, перезаписываемые включениями.

0 голосов
/ 07 апреля 2011

Попробуйте вызвать ваш класс сразу после включения:

include_once '../sys/core/init.inc.php';

$Intro = new Intro(); 

/*
 * Smarty template engine
 */

include_once '../sys/core/smarty/Smarty.class.php'; 

$smarty = new Smarty;
$smarty->debugging = false;
$smarty->caching = false;
$smarty->cache_lifetime = 86400; // 24 timer

/*
 * gettext translation
 */

if( ! defined('PROJECT_DIR')){ define('PROJECT_DIR', realpath('/var/www/v3/')); }   
if( ! defined('LOCALE_DIR')){ define('LOCALE_DIR', PROJECT_DIR .'/sys/locale'); }
if( ! defined('DEFAULT_LOCALE')){ define('DEFAULT_LOCALE', 'no_NO'); }
include_once('../sys/core/gettext/gettext.inc');
$encoding = 'utf-8';
$locale = (isset($_COOKIE['lang']))? $_COOKIE['lang'] : DEFAULT_LOCALE;
T_setlocale(LC_MESSAGES, $locale);
$domain = 'messages';
T_bindtextdomain($domain, LOCALE_DIR);
T_bind_textdomain_codeset($domain, $encoding);
T_textdomain($domain);

/*
 * facebook
 */

include_once '../sys/core/facebook/facebook.php';

// Create our Application instance (replace this with your appId and secret).
// Create our Application instance.
$facebook = new Facebook(array(
  'appId' => 'xxx',
  'secret' => 'xxx',
  'cookie' => true,
)); 

$session = $facebook->getSession();

$me = null;
// Session based API call.
if ($session) {
  try {
    $uid = $facebook->getUser();
    $me = $facebook->api('/me'); // me?fields=email
    $email = $facebook->api('me?fields=email');

  } catch (FacebookApiException $e) {
    error_log($e);
  }
}

// login or logout url will be needed depending on current user state.
if ($me) {
  $logoutUrl = $facebook->getLogoutUrl();
} else {
 $loginUrl = $facebook->getLoginUrl(
        array('req_perms' => 'email, publish_stream')
    );
}

echo $Intro->ip(); 
exit(); 

Не должно работать, но может быть хорошим началом для отладки.Тем не менее, может быть полезно опубликовать ваш вступительный класс.

...