Фальсифицирование Последнего Статического связывания перед php 5.3

Если вы хотите установить для полноэкранного атрибута значение True, это так же просто, как:

root = Tk()
root.attributes('-fullscreen', True)

Однако, он не показывает строку заголовка. Если вы хотите, чтобы он был видимым, вы можете изменить размер элемента Tk с помощью метода geometry():

root = Tk()
w, h = root.winfo_screenwidth(), root.winfo_screenheight()
root.geometry("%dx%d+0+0" % (w, h))

С помощью winfo_width() и winfo_height() вы можете получить ширину и высоту или окно, и также вы можете привязать обработчик события к событию <Configure>:

def resize(event):
    print("New size is: {}x{}".format(event.width, event.height))

root.bind("<Configure>", resize)
11
задан hakre 18 July 2012 в 19:02
поделиться

3 ответа

Вы можете использовать экземпляры объектов, а не классы. Если вам нужен глобальный символ, вы можете использовать глобальную переменную. Поскольку в PHP они довольно громоздки, можно обернуть их функцией. Например: [

class ClassA {
  function call() {
    return $this->inner();
  }
  function inner() {
    return "Class A";
  }   
}
function ClassA() {
  static $instance;
  return $instance ? $instance : new ClassA();
}

class ClassB extends ClassA {
  function inner() {
    return "Class B";
  }
}
function ClassB() {
  static $instance;
  return $instance ? $instance : new ClassB();
}

echo "<p>Class A = " . ClassA()->call();
echo "<p>Class B = " . ClassB()->call();

] Но лучше вообще отказаться от глобальных символов; Причина, по которой он хорошо работает в Ruby / Rails, заключается в том, что Ruby на самом деле не имеет статического состояния, в отличие от PHP. Класс может быть повторно привязан и добавлен во время выполнения, что позволяет легко расширять структуру. В PHP классы всегда являются окончательными, поэтому обращение к ним в коде приложения является очень сильной степенью связи.

1
ответ дан 3 December 2019 в 10:45
поделиться

К сожалению, нет хорошего способа сделать это (иначе PHP-программисты не стали бы так радоваться этой функции).

Вы должны передать имя класса. PHP <5.3 также не имеет красивого синтаксиса для статических вызовов с динамическим именем класса, что делает все еще более уродливым:

static function call($class)
{
    return call_user_func(array($class,"inner"));
}
…
ClassA::call("ClassA");
ClassB::call("ClassB");

Если вы можете изменить код (и не использовать static ), то синглтоны сделают это терпимее. Вы можете создать вспомогательную функцию , чтобы упростить синтаксис:

X("ClassA")->call();
X("ClassB")->call();

Функция X должна искать, создавать и возвращать экземпляр класса.

1
ответ дан 3 December 2019 в 10:45
поделиться

Если производительность не является проблемой, вы можете использовать debug_backtrace (), чтобы найти вызываемый класс:

$bt = debug_backtrace();
return get_class($bt[1]['object']); 

http://php.net/manual/en/function.debug-backtrace. php

3
ответ дан 3 December 2019 в 10:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: