ООП: Извеждане на масив.

vik96

Registered
Значи имам файл class.php:
Код:
<?
class Search
{
function tarsi($text)
{
$this->new = preg_match_all("/(\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/i",$this->text,$this->matches);
return $this->matches[0];
}
}
?>

и Index.php:
Код:
<?php
include("classes.php");

$search = new Search;

$file = "http://sadsadsad asdsa sadsad sdsfdsa sf<a href='w'><sadas";
$r = $search->tarsi($file);
foreach ( $r as $a ) { echo $a; }

?>

Защо не работи кода?
 
$file = "http://sadsadsad asdsa sadsad sdsfdsa sf<a href='w'><sadas";
$r = new Search();
$r-> tarsi($file);
foreach ( $r as $a ) { echo $a; }

Mисля че има грешка във функцията но не съм сигурен.
ПП: Имаш файл class.php а инклудваш classes.php
 
Код:
...return $this->matches[0]; ...
Така връща само 1 запис в едномерен масив, а ти се опитваш да го обходиш с foreach затова трябва да стане така
Код:
...return $this->matches;...
:?:

ЕDIT:

Код:
<?
class Search
private $text=''; // задаване на променливата
private $matches=array(); // задаване на променливата
{
function tarsi($text)
{
$this->new = preg_match_all("/(\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/i",$this->text,$this->matches);
return $this->matches;//връщаш целия масив
}
}
?>
 
miro_94 каза:
Код:
...return $this->matches[0]; ...
Така връща само 1 запис в едномерен масив, а ти се опитваш да го обходиш с foreach затова трябва да стане така
Код:
...return $this->matches;...
:?:

ЕDIT:

Код:
<?
class Search
private $text=''; // задаване на променливата
private $matches=array(); // задаване на променливата
{
function tarsi($text)
{
$this->new = preg_match_all("/(\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/i",$this->text,$this->matches);
return $this->matches;//връщаш целия масив
}
}
?>

пфф... :)

Код:
<?
class Search {
//Методите и пропъртитата се декларират като :
// public - Видимо от всякъде
// protected - От тялото на класа в който е създаден и от дъщерните класове
// private - Видимо само за тялото в което е създадено 

private $text; // задаване на променливата - с видимост само за текущият обект.
private $matches; // задаване на променливата - с видимост само за текущият обект.

// Да споменем и функцията __construct();

public function __construct(){
    // Тази функция се изпълнява при инстанциране на обекта...
    // Така, че тук може да сложиш :
    $this->text = 'блябля'; // default value
    $this->$matches = array(); // default value
}

public function tarsi($text)
{
$this->new = preg_match_all("/(\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/i",$this->text,$this->matches);
return $this->matches;//връщаш целия масив
}
}
?>

Ако става дума за правилно писане... има още маса глупости които трябва да се добавят...
По-добре виж как се пишат класове и за какво служат, как да ги използваш и най-вече какво значи "ООП".

Поздрави!
 
dhtodorov каза:
miro_94 каза:
Код:
...return $this->matches[0]; ...
Така връща само 1 запис в едномерен масив, а ти се опитваш да го обходиш с foreach затова трябва да стане така
Код:
...return $this->matches;...
:?:

ЕDIT:

Код:
<?
class Search
private $text=''; // задаване на променливата
private $matches=array(); // задаване на променливата
{
function tarsi($text)
{
$this->new = preg_match_all("/(\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/i",$this->text,$this->matches);
return $this->matches;//връщаш целия масив
}
}
?>

пфф... :)

Код:
<?
class Search {
//Методите и пропъртитата се декларират като :
// public - Видимо от всякъде
// protected - От тялото на класа в който е създаден и от дъщерните класове
// private - Видимо само за тялото в което е създадено 

private $text; // задаване на променливата - с видимост само за текущият обект.
private $matches; // задаване на променливата - с видимост само за текущият обект.

// Да споменем и функцията __construct();

public function __construct(){
    // Тази функция се изпълнява при инстанциране на обекта...
    // Така, че тук може да сложиш :
    $this->text = 'блябля'; // default value
    $this->$matches = array(); // default value
}

public function tarsi($text)
{
$this->new = preg_match_all("/(\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/i",$this->text,$this->matches);
return $this->matches;//връщаш целия масив
}
}
?>

Ако става дума за правилно писане... има още маса глупости които трябва да се добавят...
По-добре виж как се пишат класове и за какво служат, как да ги използваш и най-вече какво значи "ООП".

Поздрави!
Твоя код връща ArrayArrayArray... Нали за да извикам някой от линковете трябва да направа така : $matches[0][1]
 
Офф..
Така работи:

Код:
<?php
include("classes.php");
$file = "lsadsad sad http://web-tourst.net";

$r = tarsi($file);
foreach ( $r as $a ) { echo $a.'<br>'; }

?>



Код:
<?

function tarsi($text)
{
$new = preg_match_all("/(\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/i",$text,$matches);
return $matches[0];//връщаш целия масив
}

?>

Ама като е в клас...не.
 
Код:
<? 
class Search { 
      private $text; 
      private $matches; 

      public function __construct(){ 
    
            $this->text = 'блябля';
            $this->matches = array();
      } 

       public function tarsi($text) 
      { 
               preg_match_all("/(\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/i",$this->text,$this->matches); 
                return $this->matches;
      } 
} 
?>

Малко поправка по кода на @dhtodorov

После върнатото го минаваш с foreach и готово.


И къде забога видяхте, че preg_match_all се използва чрез променлива($var = preg_match_all()). Нали самата функция връща масив :D
 
Код:
<?
class search
{
	private $text;
	public 	$matches = array();
	
	public function __construct($text)
	{
		$this->text = $text;
	}
	
	public function mysearch()
	{
		$pattern = preg_match_all("/(\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/i",$this->text,$this->matches);
		
		return $this->matches[0];
	}
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>bla</title>
	</head>
	<body>
	
	<?php 
		$text = "http://google.bg text text http://google.com i pak text i t.n.";
		$search = new search($text);
		$r = $search->mysearch();
		
		foreach($r as $a)
		{
			print $a . '<br/>';
		}
	?>
	
	</body>
</html>
Дерзай.
 
Pr0oF каза:
Код:
<?
class search
{
	private $text;
	public 	$matches = array();
	
	public function __construct($text)
	{
		$this->text = $text;
	}
	
	public function mysearch()
	{
		$pattern = preg_match_all("/(\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/i",$this->text,$this->matches);
		
		return $this->matches[0];
	}
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>bla</title>
	</head>
	<body>
	
	<?php 
		$text = "http://google.bg text text http://google.com i pak text i t.n.";
		$search = new search($text);
		$r = $search->mysearch();
		
		foreach($r as $a)
		{
			print $a . '<br/>';
		}
	?>
	
	</body>
</html>
Дерзай.
Мерси.Мерси :)
 
Всъщност, това не ми върши работа :S аз тая функция ще я извиквам няколко пъти и всеки път текста ще е различен.
 
Код:
<?
class search
{
	public 	$matches;
	
	public function __construct()
	{
		$this->matches = array();
	}
	
	public function mysearch($text)
	{
		$pattern = preg_match_all("/(\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/i",$text,$this->matches);
		
		return $this->matches[0];
	}

}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title>bla</title>
	</head>
	<body>
	
	<?php 
		$text = "http://google.bg text text http://google.com i pak text i t.n.";
		$search = new search();
		$r = $search->mysearch($text);
		
		foreach($r as $a)
		{
			print $a . '<br/>';
		}
		
		print '<hr/>';
		
		$newtext = "http://example.com bla bla bla http://example-2.com bla bla";
		$newsearch = new search();
		$bla = $search->mysearch($newtext);
		
		foreach($bla as $blabla)
		{
			print $blabla . '<br/>';
		}		
	?>
	
	</body>
</html>
Дефинирай си го още пъти за повече тестове.
 

Горе