PHP:包含一个 class.php 中的方法以输出另一个中的变量?

PHP: Include methods from one class.php to output variables in another?

如果我的术语不正确,我们深表歉意。我想使用一个 class 中的 methods/functions 并使用它们输出另一个 class 文件中的变量。这是我的主要基地:

Sphere.class.php

   <?php

    class SphereCalculator {


    const PI = 3.14;
    const FOUR_THIRDS = 1.33;

    
        public function __construct($radius){
            $this->setRadius ($radius);
        }
   
        public function setRadius ($radius){
            $this->classRadius = $radius;
        }
    
        public function getRadius(){
            return $this->classRadius;
        }
    
    
        public function getArea () {
        
            return self::PI * ($this->classRadius * $this->classRadius);
        }
    
    }

    $mySphere = new SphereCalculator ($newRadius);

所以使用这个 class 的函数,我想从第二个 php 文件输出半径和面积,使用 include 来调用这些方法。但我真的不知道从哪里开始。我查了很多教程,但它们都是针对两个 classes 和一个 php 文件的。这是我所了解的。

App.class.php

 <?php
    include ("Sphere.class.php");
    
    class AppClass {
    
    
    
        function __construct($radius)
        {

        //something here to call $radius from
        //base class and set it to $newRaduis
        
        }
    
        function callSphereClass ($mySphere)
        {
        //something to call $mySphere
        //something here to allocate $newRadius

        echo "The radius is ".$newRadius."<br>";
        echo "The area is ".$mySphere->getArea ()."<br>";
        }
    
    }


    $newRadius = 113;

    $appClass = new AppClass ();
    $appClass->callSphereClass();

    ?>

如果你想在另一个class中使用一些方法,你必须扩展那个class。使用parent::ClassName::调用锚点方法

您可以而且应该将每个 class 写在一个单独的文件中。只需使用 require_once 加载另一个文件中需要的 class。将项目最常用的 classes 包含在一个地方或更好地查看 spl_autoload mechanism.

将适用

由于 PHP 中没有 classic 多态性,PHP 5.4 引入了特征。现在您可以声明 "packages" 种可以由不同 class 家族继承的方法。

<?php
class BaseClass
{
  protected 
    $a
  ;

  public function __construct($a)
  {
    $this->a = $a;
  }

  public function do_something()
  {
    echo $this->a . "<br>\n";
  }  
}

class Derived extends BaseClass
{
  protected 
    $b
  ;

  public function __construct($a, $b)
  {
    parent::__construct($a);
    $this->b = $b;
  }

  public function do_something()
  {
    echo $this->a . ' / ' . $this->b . "<br>\n";
  }
}

class Derived2 extends Derived
{
  public function do_something()
  {
    parent::do_something();
    BaseClass::do_something();
  }  
}

$obj = new Derived2(1,2);
$obj->do_something();
?>

在我看来,您只是想使用(即实例化)您的class;这应该发生在另一个 class 中相对不重要。

include 'Sphere.class.php';

class AppClass {

    protected $radius;

    function __construct($radius) {
        $this->radius = $radius;
    }

    function callSphereClass() {
        $sphere = new SphereCalculator($this->radius);
        echo "The area is ", $sphere->getArea();
    }
}


$newRadius = 113;
$appClass = new AppClass($newRadius);
$appClass->callSphereClass();

嗨,你可以做到这一点。

<?php
    include ("Sphere.class.php");

    class AppClass {



        function __construct()
        {
            // YOU DO NOT NEED ANYTHING HERE BECAUSE YOU ARE NOT PASSING
            // ANY VALUES INTO THE CONSTRUCTOR
        }

        function callSphereClass ($mySphere)
        {
            //something to call $mySphere
            // CREATE AN INSTANCE OF SphereCalculator
            $createdObj = new SphereCalculator($mySphere);

            //something here to allocate $newRadius
            // USE THE METHODS THROUGH THE OBJECT $createdObj
            echo "The radius is ".$createdObj->getRadius() ."<br />"; // not $newRadius."<br>";
            echo "The area is ".$createdObj->getArea ()."<br>";
        }

    }


    $newRadius = 113; // this needs to be passed into the callSphereClass()

    $appClass = new AppClass();
    $appClass->callSphereClass($newRadius); // like this

?>