在命令行中执行php类文件

时间:2014-04-05 13:33:15

标签: 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 $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;
        }
}
?>

p2.php

<?php

class p2 extends p1{
        //var $text = "This is testing app";
        //var $words = "testing";
  function get($text, $words)
  {
        $pattern = "~\b((?:([a-z][\w-]+:(?:/{1,3}))?(www\d{0,3}[.])?(?<!@)[a-z0-9.\-]+[.][a-z]{2,4}/?)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»\"\"''])?)~ie";
        //echo $text;
      preg_match_all($pattern, $text, $matches, PREG_OFFSET_CAPTURE );
      $this->pushToResultSet($matches);
  }
}

?>

更新代码

p1.php

<?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

<?php

class p2 extends p1{
  function get($text, $words)
  {
        $pattern = "~\b((?:([a-z][\w-]+:(?:/{1,3}))?(www\d{0,3}[.])?(?<!@)[a-z0-9.\-]+[.][a-z]{2,4}/?)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»\"\"''])?)~ie";
        //echo $text;
      preg_match_all($pattern, $text, $matches, PREG_OFFSET_CAPTURE );
      $this->pushToResultSet($matches);
  }
}
    $instance = new p2();
    $instance->get("This is testing app", "testing");


?>

我执行了两个

php p1.php
php p2.php

但没有结果。

2 个答案:

答案 0 :(得分:1)

你必须从你的班级发起一个对象。在p2.php中,在课后执行以下操作:

$ob = new p2;
 $ob->get("I am good", "good");

这将打印输出&#34;我很好&#34; enter image description here

答案 1 :(得分:1)

编写一个类实际上不会导致任何事情发生,它只是定义了类。如果你想使用这个类,你需要创建它的一个实例,并可能在它上面调用一个方法。如果你把p2.php的末尾放在以下几行,你可能会做你期望的事情。

$instance = new p2();
$instance->get("This is testing app", "testing");

在类中定义两个变量似乎有点奇怪。我怀疑你希望它们成为get方法的输入。方法的参数不是从对象中获取的,而是由调用者传递给任何函数。如果你想使用对象中的变量,你不需要将它们放在方法签名中,你可以将它们称为$ this-&gt; text。

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