Archive for the ‘PHP’ Category

Чтения файла по строкам

Monday, December 22nd, 2008
$lines = file("file.php");
foreach ($lines as $line) {
  $line = rtrim($line);
  print("$line\n");
}

Получение пути через DOMXPath

Wednesday, December 10th, 2008
$a = "<body><head><title>Page Title</title></head></body>";
$dom = new DOMDocument('1.0', 'utf-8');
$dom->preserveWhiteSpace = false;
$dom->loadXML($a);
$xpath = new DOMXPath($dom);
$arts = $xpath->query("/body/head/title");

foreach($arts as $art) {
    echo $art->nodeName . " - " . $art->nodeValue . "<br />";
}

Вызов приватного метода из статического

Wednesday, December 10th, 2008
class Option_propose{
    private function option_sub_serch(){
                return $value;
    }
    public static function propose(){
        $value = self::option_sub_serch();
    }
}
Option_propose::propose();

как видно функция вызывается не через $this а через self

Такое имя переменной

Wednesday, April 30th, 2008

Если вам захочется использовать не традиционное, для PHP, имя для переменной в классе, то воспользуйтесь конструкцией {’name’}.

$s = new myClass();
$s->{'var with strange name'} = 15;
echo $s->{'var with strange name'}; //15

Вывод переменных класса

Wednesday, April 30th, 2008

Еще один простой и быстрый способ увидеть переменные класса это print_f

print_f(myClass)

stdClass Object
(
[$a] => "1 may"
)

Имя дочернего класса 0.5

Friday, April 25th, 2008

Ну в таком контксте можно было получить в версии ниже 5.3

class A {
function test() {
echo get_class($this);
}
}

class B extends A {
function __construct() {
parent::test();
}
}
new B();

в результате дает B на php 5.2.5

В 5.3 появилось позднее СТАТИЧЕСКОЕ связвыние.
По поводу него мануал:
language.oop5.late-static-bindings.php
и заметка на
хабре

автор: solenko

Имя дочернего класса

Thursday, April 24th, 2008

В новом PHP 5.3 дбавленно много вкусного, get_called_class() позволяет получить имя дочернего класса в родительском

class base {
	function say($text){
		echo $text." from ".get_called_class();
	}
}

class ext extends base {
	function __construct(){
		parent::say("hello");
	}
}

$ex = new ext();

hello from ext

Подкачка классов

Wednesday, April 23rd, 2008

Для расширения взможностей функции __autoload с версии 5,1 появилась новая функция, позволяющая загружать класы из разных каталогов

spl_autoload_register(null,false);

function libsLoader($classLib) {
    require("/libs/".$classLib.".php");
}
function baseLoader($classKernel) {
       	require($classLib.".php");
}

spl_autoload_register('libsLoader',false);
spl_autoload_register('baseLoader',false);

теперь если потребутеся загрузить класс то функция проверит его в базовом каталоге, а затем в каталоге библиотек

Переменная в потоке

Monday, April 21st, 2008

Если вам знакома подобный метод присваивания большого текста переменной то наверняка вам изветно что между LABEL не получится использовать php переменную

$text = <<<LABEL
много много текста
LABEL;

echo $text;

Так вот создатели решили исправить этот недостаток

$value = "много";
$text = <<<LABEL
много $value текста
LABEL;

echo $text;

Класс для сборки Mysql

Friday, March 21st, 2008

Ниже приведенный класс позволяет унифицировать составление запросов. Удобно тем, что попутно в каждый метод класса можно добавлять проверки и прочее необходимое

class DBManager {
	private $selectables = array();
	private $table;
	private $whereClause;
	private $limit;
public function select(){
	$this->selectables=func_get_args();
	return $this;
}
public function from($table) {
	$this->table = $table;
	return $this;
}
public function where($clause) {
	$this->whereClause = $clause;
	return $this;
}
public function limit($limit) {
	$this->limit = $limit;
	return $this;
}
public function result() {
	$query = "SELECT ".join(",",$this->selectables)."
		FROM {$this->table}";
	if (!empty($this->whereClause))
	$query .= " WHERE {$this->whereClause}";
	if (!empty($this->limit))
	$query .= " LIMIT {$this->limit}";
	return $query;
  }
} 

$db= new DBManager();
$db->select("id","name")->from("users")->where("id=1")
->limit(1)->result();