在命令行中执行php类文件

在命令行中执行php类文件,php,class,Php,Class,我不熟悉php中的OOP概念。我在这里创建了两个文件p1,p2。从p1我将两个参数传递给p2。我几乎没有回应什么结果。但当我运行它时,它不会显示任何结果 我试着这样做: php p1.php 也在命令行中 php p1.php p2.php 但它没有显示任何结果。我在哪里犯了错误 p1.php <?php require_once('p2.php'); abstract class p1{ private $resultSet; private $ma

我不熟悉php中的OOP概念。我在这里创建了两个文件p1,p2。从p1我将两个参数传递给p2。我几乎没有回应什么结果。但当我运行它时,它不会显示任何结果

我试着这样做:

php p1.php 
也在命令行中

php p1.php p2.php
但它没有显示任何结果。我在哪里犯了错误

p1.php

<?php
require_once('p2.php');
abstract class p1{
        private $resultSet;
        private $matches;
        function __construct(){
        }
        var $text = "This is testing app";
        var $words = "testing";

        abstract public function get($text, $words);
        public function pushToResultSet(array $matches)
        {
                        if(sizeof($matches[0])){
                                foreach($matches[0] as $match){
                                        echo $match;
                                        $this->resultSet[] = $match;
                                }
                        }
        }

        public function getResultSet(){
                echo $this->resultSet;
                return $this->resultSet;
        }
}
?>
<?php
require_once('p2.php');
abstract class p1{
        private $resultSet;
        private $matches;
        function __construct(){
        }
        public function get($text, $words);
        public function pushToResultSet(array $matches)
        {
                        if(sizeof($matches[0])){
                                foreach($matches[0] as $match){
                                        echo $match;
                                        $this->resultSet[] = $match;
                                }
                        }
        }

        public function getResultSet(){
                echo $this->resultSet;
                return $this->resultSet;
        }
}
?>

但是没有结果。

您必须从类中启动一个对象。在p2.php中,课后执行以下操作:

$ob = new p2;
 $ob->get("I am good", "good");
这将打印出“我很好”
编写类实际上并不会导致任何事情发生,它只是定义了类。如果您想使用这个类,您需要创建它的一个实例,并可能对它调用一个方法。如果您将以下几行放在p2.php的末尾,它可能会达到您的预期效果

$instance = new p2();
$instance->get("This is testing app", "testing");
在类中定义两个变量似乎有点奇怪。我怀疑您希望它们成为get方法的输入。方法的参数不是从对象获取的,而是由调用方作为任何函数传递的。如果您想使用对象中的变量,您不需要将它们放入方法签名中,您可以将它们称为$this->text


我想你也误解了抽象函数的意义。您不需要在超类中定义抽象函数,除非您想从该超类调用它。只需在子类中定义一个新函数就可以了。当您想要定义一个类的大部分,但不是一个关键的功能时,抽象函数非常有用。子类提供了这种功能,但是类的用户只需要知道超类。如果您希望其他人能够为您编写抽象方法,但您仍然希望能够在自己的代码中与类交互,那么这将非常有用。

您只加载文件,其他什么都不加载……我认为不应该关闭它,因为这是一个关于oop基本概念的问题,许多初学者可能需要它的主题。我建议不要拿着它,让它保持打开状态。我也不明白为什么这些人如此热衷于关闭这个线程谢谢你的描述,你能不能在你的回答中标准化代码,去掉不必要的部分?这将帮助我更好地理解。在这里,我检查了各种各样的图坦卡蒙,并创建了上面的代码,我不确定我是否遵循了。我的意思是,您可以将我给出的行添加到p2.php文件的末尾(在类的结尾}之后,但在?>)之前),并且可以省略p1中定义两个“var”变量和抽象函数的行,尽管这不会改变功能。此外,如果p1没有任何抽象方法,它就不需要是抽象类。我需要在p2.php中包含p1.php吗?我很想知道在这个程序中如何编写和执行代码。因此,如果您能修改我的代码并将其放入您的回答中,我将非常感激。我已经准确地描述了您需要进行的更改。我想这会帮助你更好地理解我所说的话,自己做出改变,而不是让我为你做出改变。如果你有什么不明白的地方,那就去问,有人会解释的。
php p1.php
php p2.php
$ob = new p2;
 $ob->get("I am good", "good");
$instance = new p2();
$instance->get("This is testing app", "testing");