我们有两个类A&B:
class A{
var $settings;
function getinfo(){
$settings['domain']="mydomain";
$settings['pass']="1234";
return $settings;
}
}
class B extends A{
$ads = A::getinfo();
function makeurl(){
return "template/".$ads['domain'];
}
}
现在我的页面中有一个B的实例,但我需要"pass",也许是一些类似的代码:
$theme=new B();
$mypass = $theme->A->getinfo;
echo $mypass[$pass];
我知道这段代码充满了错误,但我写不出更好的了。有没有任何解决方案可以在不创建A实例的情况下访问密码?
是。就这么简单:
$theme = new B();
$mypass = $theme->getinfo();
echo $mypass['pass'];
你也可以稍微提高你的课程:
class A
{
var $settings;
function getinfo()
{
$this->settings['domain'] = "mydomain";
$this->settings['pass'] = "1234";
return $this->settings;
}
}
class B extends A
{
function makeurl()
{
$this->getinfo();
return 'template/' . $this->settings['domain'];
}
}
既然B是A的子类,为什么不从B实例调用A中的设置变量?
试试这个代码:
<?php
class A
{
var $settings;
function getinfo()
{
$settings['domain'] = "mydomain";
$settings['pass'] = "1234";
return $settings;
}
}
class B extends A
{
function makeurl()
{
$ads = $this->getinfo();
return "template/" . $ads['domain'];
}
}
$theme=new B();
$mypass = $theme->getinfo();
echo $mypass['pass'];
让设置成为a中的公共静态变量怎么样?通过将其作为类变量,您将不需要a.的实例
class A {
public static $settings;
// getter and setter methods here
}
// code elsewhere
echo A::$settings['pass'];
另外,因为你的类B扩展了A,它继承了方法和属性,所以你可以调用
$theme = new B();
$mySettings = $theme->GetInfo();
如果B扩展了A,则A的所有受保护成员和公共成员都将继承到B中,因此您可以直接访问它们。
class A {
protected $foo;
public function __construct() { $this->foo = 1; }
}
class B extends A {
public function bar() {
echo $this->foo;
}
}
$b = B();
$b->bar();
如果我正确理解你,你就很接近了:
$theme=new B();
$settings = $theme->getinfo();
$mypass = $settings['pass'];
echo $mypass;