私はこれが常に行われていることを知っていますが、何らかの理由で、それは私には少し意味がありません。[@#$%を挿入してください!ここで]この(おそらく)明白な解決策のための適切なOOP手順が何であるかわかりません。私はAbstract型とInterface型のクラスについて簡単に読みましたが、私が求めていることを実行する例は役に立ちませんでした。
これがセットアップです...
この例では、2つのクラスがあります。1つはスクリプトから呼び出すもので、もう2つはスクリプトから、または最初に呼び出したクラス内から呼び出すことができます。疑似コード:
<?php
// Some code here
$timer = new timer();
$doSomethingCool = new doSomethingCool();
$doSomethingCool->doIt();
print $timer->length();
class timer {
private $startTime;
private $stopTime;
private $length;
public function start() {
// Start running the timer
}
public function end() {
// End the timer
}
public function length() {
// Return the length of the timer
return $this->length;
}
}
class doSomethingCool {
public function doIt() {
$timer->start();
// Some code here
$timer->end();
}
}
?>
私はこれを「実行」することができましたが(以下を参照)、この回避策は厄介であり、これが適切なオブジェクト指向モデリングではないと100%確信しています。
<?php
// Start by declaring all classes and pass all classes to themselves...
$doSomethingCool = new doSomethingCool();
$timer = new timer();
$class = array(
'doSomethingCool'=>$doSomethingCool,
'timer'=>$timer
);
$doSomethingCool->class = $class;
$timer->class = $class;
// Some code here
$class['doSomethingCool']->doIt();
print $timer->length();
class timer {
// In each class we now declare a public variable
// 'class' that we had passed all class instances to...
public $class;
private $startTime;
private $stopTime;
private $length;
public function start() {
// Start running the timer
}
public function end() {
// End the timer
}
public function length() {
// Return the length of the timer
return $this->length;
}
}
class doSomethingCool {
public $class;
public function doIt() {
$this->class['timer']->start();
// Some code here
$this->class['timer']->end();
}
}
?>
E_STRICTのため、使用したくありません$timer::start();
。
それで、解決策は何ですか、ご列席の皆様?ありがとう!