我是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
但没有结果。
答案 0 :(得分:1)
你必须从你的班级发起一个对象。在p2.php中,在课后执行以下操作:
$ob = new p2;
$ob->get("I am good", "good");
这将打印输出&#34;我很好&#34;
答案 1 :(得分:1)
编写一个类实际上不会导致任何事情发生,它只是定义了类。如果你想使用这个类,你需要创建它的一个实例,并可能在它上面调用一个方法。如果你把p2.php的末尾放在以下几行,你可能会做你期望的事情。
$instance = new p2();
$instance->get("This is testing app", "testing");
在类中定义两个变量似乎有点奇怪。我怀疑你希望它们成为get方法的输入。方法的参数不是从对象中获取的,而是由调用者传递给任何函数。如果你想使用对象中的变量,你不需要将它们放在方法签名中,你可以将它们称为$ this-&gt; text。
我认为你也误解了抽象函数的意义。您不需要在超类中定义抽象函数,除非您想从该超类中调用它。只是在子类中定义一个新函数就可以了。当您想要定义大部分类时,抽象函数很有用,但不是一个关键的功能。子类提供该功能,但该类的用户只需要知道超类。如果您希望其他人能够为您编写抽象方法,这很有用,但您仍希望能够在自己的代码中与该类进行交互。