__call и __callStatic не работают должным образом или пишут неправильно

<?php
class Statics {

private static $keyword;

public static function __callStatic($name,$args){
self::$keyword = "google";
}
public static function TellMe(){
echo self::$keyword;
}
}

Statics::TellMe();

Это простая разбивка, которую я пытался использовать __construct но так, как я пишу код Statics::TellMe(); Мне нужно было бы написать new для __construct работать. И моя личная статическая переменная keyword не пишется без того, чтобы не вызывать никаких идей относительно того, почему это не работает ??

IDE не работает пример

    private static $pathname;
public function __construct($dir = "")
{
set_include_path(dirname($_SERVER["DOCUMENT_ROOT"]));
if($dir !== "") {
$dir = "/".$dir;
}
self::$pathname = $dir.".htaccess";
if( file_exists(self::$pathname) ) {
self::$htaccess = file_get_contents($dir.".htaccess",true);
self::$htaccess_array = explode("\n",self::$htaccess);
}
}

self::$patname не получает назначение, потому что я не делаю $key = new Key(); поэтому мне нужен способ сделать это, если я просто сделаю Key::get() или что-нибудь в этом роде.

1

Решение

У вас есть недоразумение в пути __callStatic работает.
Волшебный метод __callStatic будет действовать как запасной метод, когда статический метод не известен классу.

class Statics {

private static $keyword;

public static function __callStatic($name,$args){
return 'I am '.$name.' and I am called with the arguments : '.implode(','$args);
}
public static function TellMe(){
return 'I am TellMe';
}
}

echo Statics::TellMe(); // print I am TellMe
echo Statics::TellThem(); // print I am TellThem and I am called with the arguments :
echo Statics::TellEveryOne('I','love','them'); // print I am TellEveryOne and I am called with the arguments : I, love, them

Итак, в вашем случае вы можете сделать следующее:

class Statics {

private static $keyword;

public static function __callStatic($name,$args){
self::$keyword = "google";
return self::$keyword;
}
}

echo Statics::TellMe();

Согласно вашему редактированию:

class Statics{
private static $pathname;
private static $dir;

public function getPathName($dir = "")
// OR public function getPathName($dir = null)
{
if($dir !== self::$dir || self::$pathname === ''){
// OR if($dir !== null || self::$pathname === ''){ -> this way if you do getPathName() a second time, you don't have to pass the param $dir again
self::$dir = $dir;
set_include_path(dirname($_SERVER["DOCUMENT_ROOT"]));
if($dir !== "") {
$dir = "/".$dir;
}
self::$pathname = $dir.".htaccess";
if( file_exists(self::$pathname) ) {
self::$htaccess = file_get_contents($dir.".htaccess",true);
self::$htaccess_array = explode("\n",self::$htaccess);
}
}
return self::$pathname;
}
}

echo Statics::getPathName('some');
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]