Чтения файла по строкам
Monday, December 22nd, 2008$lines = file("file.php");
foreach ($lines as $line) {
$line = rtrim($line);
print("$line\n");
}
$lines = file("file.php");
foreach ($lines as $line) {
$line = rtrim($line);
print("$line\n");
}
$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 />";
}
class Option_propose{
private function option_sub_serch(){
return $value;
}
public static function propose(){
$value = self::option_sub_serch();
}
}
Option_propose::propose();
как видно функция вызывается не через $this а через self
Если вам захочется использовать не традиционное, для PHP, имя для переменной в классе, то воспользуйтесь конструкцией {’name’}.
$s = new myClass();
$s->{'var with strange name'} = 15;
echo $s->{'var with strange name'}; //15
Еще один простой и быстрый способ увидеть переменные класса это print_f
print_f(myClass) stdClass Object ( [$a] => "1 may" )
Ну в таком контксте можно было получить в версии ниже 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
В новом 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
Для расширения взможностей функции __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);
теперь если потребутеся загрузить класс то функция проверит его в базовом каталоге, а затем в каталоге библиотек
Если вам знакома подобный метод присваивания большого текста переменной то наверняка вам изветно что между LABEL не получится использовать php переменную
$text = <<<LABEL много много текста LABEL; echo $text;
Так вот создатели решили исправить этот недостаток
$value = "много"; $text = <<<LABEL много $value текста LABEL; echo $text;
Ниже приведенный класс позволяет унифицировать составление запросов. Удобно тем, что попутно в каждый метод класса можно добавлять проверки и прочее необходимое
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();