如何访问继承到我们调用的php类的变量?

如何访问继承到我们调用的php类的变量?,php,class,Php,Class,我们有两个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']; }

我们有两个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];

我知道这段代码有很多错误,但我写不出更好的。是否有任何解决方案可以在不创建密码实例的情况下访问密码?

是。就这么简单:

$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'];
    }
}

对。就这么简单:

$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中的设置变量呢?

既然B是A的子类,为什么不从B实例调用A中的设置变量呢?

如果我理解正确的话,您非常接近:

$theme=new B();
$settings = $theme->getinfo();
$mypass = $settings['pass'];
echo $mypass;

如果我没弄错的话,你很接近:

$theme=new B();
$settings = $theme->getinfo();
$mypass = $settings['pass'];
echo $mypass;

如果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();

如果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();
请尝试以下代码:

<?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'];
尝试以下代码:

<?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的实例

class A {
    public static $settings;
    // getter and setter methods here
}

// code elsewhere
echo A::$settings['pass'];
另外,因为类B扩展了A,所以它继承了方法和属性,所以您可以调用

$theme = new B();
$mySettings = $theme->GetInfo();

将设置设为一个公共静态变量怎么样?通过将其设置为类变量,您将不需要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();

是的,这些天我大部分时间都在写python,这一条滑倒了:)谢谢。:)我认为OP需要一个好的教程来学习基础知识。。。visibility/scope是第2课的内容,是的,这些天我写的大部分都是python,这一条滑了一下:)谢谢。:)我认为OP需要一个好的教程来学习基础知识。。。可见性/范围是第2课的内容,IMOOP似乎正在学习基础知识。这应该在第二课中讲。。。IMOOP似乎正在学习基础知识。这应该在第二课中讲。。。依我所见