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实例,但我需要“传递”,也许这样的代码:
$theme=new B();
$mypass = $theme->A->getinfo;
echo $mypass[$pass];
我知道这段代码充满了错误,但我写不出更好的代码。是否有任何解决方案来访问密码而不创建A的实例?
答案 0 :(得分:2)
是。就这么简单:
$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'];
}
}
答案 1 :(得分:1)
为什么不从B实例中调用A中的settings变量,因为B是A?
的子类答案 2 :(得分:1)
如果我理解正确,那你就非常接近:
$theme=new B();
$settings = $theme->getinfo();
$mypass = $settings['pass'];
echo $mypass;
答案 3 :(得分:1)
如果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();
答案 4 :(得分:1)
试试这段代码:
<?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'];
答案 5 :(得分:1)
如何在A中设置公共静态变量?通过使其成为类变量,您将不需要A的实例。
class A {
public static $settings;
// getter and setter methods here
}
// code elsewhere
echo A::$settings['pass'];
另外,因为你的B类扩展了它,它继承了方法和属性,所以你可以调用
$theme = new B();
$mySettings = $theme->GetInfo();