PHP 初心者の質問
PHP コード
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--><?php
class Enum
{
protected $self=array();
public function _construct()
{
$args=func_get_args();
for($i=0,$n=count($args);$i<$n;$i++)
$this->add($args[$i]);
}
public function _get($name=null)
{
return $this->self[$name];
}
public function add($name=null,$enum=null)
{
if(isset($enum)) $this->self[$name]=$enum;
else $this->sef[$name]=end($this->self)+1;
}
}
class DefinedEnum extends Enum
{
public function _construct($itms)
{
foreach($itms as $name=>$enum)
$this->add($name,$enum);
}
}
class FlagsEnum extends Enum
{
public function _construct()
{
$args=func_get_args();
for($i=0,$n=count($args),$f=0x1;$i<$n;$i++,$f*=0x2)
$this->add($args[i],$f);
}
}
$eFruits=new Enum("APPLE","ORANGE","PEACH");
echo $eFruits->APPLE.",";
echo $eFruits->ORANGE.",";
echo $eFruits->PEACH."\n";
$eBeers=new DefinedEnum("GUINESS"=>25,"MIRROR_POND"=>49);
echo $eBeers->GUINESS.",";
echo $eBeers->MIRROR_POND."\n";
$eFlags=new FlagsEnum("HAS_ADMIN","HAS_SUPER","HAS_POWER","HAS_GUEST");
echo $eFlags->HAS_ADMIN.",";
echo $eFlags->HAS_SUPER.",";
echo $eFlags->HAS_POWER.",";
echo $eFlags->HAS_GUEST."\n";
?>
ログイン後にコピー
なぜこのコードが理解できないのですか?
$eFruits->APPLE
$ から来ていますか? eFruits ->ORANGE
$eFruits->PEACH
馬鹿なことはしないでください
-----解決策--- -- ---------------1. まずプログラムを正しく変更します。メソッド名の前にアンダースコアが付いているメソッド名はすべて 2 つのアンダースコアに変更する必要があります
2. __get メソッドを次のように変更します。
public function __get($name=null)
{
echo "Read Attribute $name";
return $this->self[$name];
}
3. 変更したコードを実行すると、何が起こっているかがわかります
------解決策---------
PHP コード
クラス列挙型
{
保護された $self=array();
パブリック関数 __construct()
{
$args=func_get_args();
for($i=0,$n=count($args);$iadd($args[$i]);
}
パブリック関数 __get($name=null)
{
$this->self[$name] を返します。
}
パブリック関数 add($name=null,$enum=null)
{
if(isset($enum)){
$this->self[$name]=$enum;
}それ以外{
$this->self[$name]=end($this->self)+1;
}
}
}
class DefinedEnum extends Enum
{
パブリック関数 __construct($itms)
{
foreach($itms as $name=>$enum)
$this->add($name,$enum);
}
}
クラス FlagsEnum は Enum を拡張します
{
パブリック関数 __construct()
{
$args=func_get_args();
for($i=0,$n=count($args),$f=0x1;$iadd($args[$i],$f);
}
}
}
$eFruits=new Enum("APPLE","ORANGE","PEACH");
echo $eFruits->APPLE.",";
echo $eFruits->ORANGE.",";
echo $eFruits->PEACH."n";
$eBeers=new DefinedEnum(array("GUINESS"=>25,"MIRROR_POND"=>49));
echo $eBeers->GUINESS.",";
echo $eBeers->MIRROR_POND."n";
$eFlags=new FlagsEnum("HAS_ADMIN","HAS_SUPER","HAS_POWER","HAS_GUEST");
echo ($eFlags->HAS_ADMIN).",";
エコー ($eFlags->HAS_SUPER).",";
echo $eFlags->HAS_POWER.",";
echo $eFlags->HAS_GUEST."n";
------解決策---------<br><font color="#e78608">両方のアンダースコアは正しいです。 </font><br>
ログイン後にコピー