10 советов вебмастерам

Эта памятка с десятью советами, которые могут стать полезными не только новичкам, но и вебмастерам продвинутым и имеющим большой опыт.

1. Не стоит брать новые домены, такие как .biz .name .info, ни один из них не прижился в Интернете, кроме последнего и при рассматривании поисковиками у них нет никакого приоритета.

2. Не стоит забывать о предпочтительных форматах gif .jpg, когда создаёте графический дизайн. Под растровую графику прекрасно подойдет первый формат, под фото – второй, а при правильном совмещении есть шанс добиться великолепного результата.

3. Если Вы уже есть в поисковых машинах, не следует закидывать их новыми заявками о регистрации. Потому как данные действия могут быть приняты за спам и Ваш сайт быстренько отнесут к сайтам из «Серого списка», если же будете продолжать в том же духе, дойдёт и до «Чёрного списка», а это значит, что поисковые роботы попросту будут обходить и игнорировать Ваш сайт.

4. Перед тем как составить слова для поиска стоит найти статистику запросов в машинах поиска, иногда будет выходить так, что запрашиваемые слова сочетают в себе не сочетаемое, но ничего не поделаешь, если желаете привлечь посетителей, Вам просто необходимо будет под данные слова подстраиваться.

5. Не стоит пытаться «мухлевать» с поисковиками, до добра это не доведёт, уж лучше вести честную, конкурентоспособную игру и это наверняка приведёт к тому, что Ваш сайт благодаря поиску станет посещаемым пользователями.

6. Не следует перегружать сайт счётчиками и различными каталогами, потому как подобные действия только увеличивают загрузку страницы.

7. Запомните, что если поисковое слово встречается в тексте, в названии сайта и в адресе страницы, особенно, если оно местами выделено жирным, то все козыря у вас на руках. Только не стоит слишком уж усердствовать, выделяя всё жирным, иначе Вашу попытку примут за жульничество.

8. Баннеры, как средство раскрутки очень не эффективны, их отдача зачастую не превышает 1%.

9. Разместите ссылки на Ваш сайт на других страницах, результат стоит того.

10. Создайте идею и сделайте свой сайт уникальным, именно уникальность сделает Ваш сайт посещаемым и неповторимым, но главное это уникальная идея.

Соблюдения всех вышеперечисленных советов не обязательно приведут Вас сразу же к успеху, но их не соблюдение это бесполезная трата сил и времени.

Октябрь 6, 2008 — Рубрика: C++, Delphi, MySQL, PHP
Метки: , , ,

Краткий эксурс в upload

Что такое Upload files, или почему не работает copy (”c:\images\sample.jpg”, “c:\uploads\ sample.jpg “)

Сентябрь 20, 2008 — Рубрика: PHP
Метки: ,

Деструкторы

Возможность объявления деструкторов может быть весьма полезной. Деструктор может вести лог отладочных сообщений, закрывать соединения с базой данных и т.п. В PHP4 отсутствовала поддержка деструкторов, хотя имелась возможность указать функцию, которая вызывается при завершении работы скрипта.

PHP5 поддерживает деструкторы, аналогично другим объектно-ориентированным языкам, таким как Java. Когда последняя ссылка на объект уничтожена, прежде, чем память, выделенная объекту, уничтожается, вызывается метод класса с именем __destruct() без каких-либо параметров.

Пример:

class MyDestructableClass {
function __construct() {
print "In constructor\n";
$this->name = “MyDestructableClass”;
}

function __destruct() {
print “Destroying ” . $this->name . “\n”;
}
}

$obj = new MyDestructableClass();
?>

Подобно конструкторам, деструкторы базовых классов не вызываются автоматически. Для вызова деструктора базового класса необходимо явно указать вызов метода parent::__destruct() в коде деструктора.

[fixxxer] Примечание: само собой разумеется, при портировании PHP4-скриптов возможной несовместимостью будет наличие методов __destruct(), используемых в других целях. Видимо, в связи с мизерной вероятностью такого случая разработчики не сочли нужным об этом упомянуть.

Март 11, 2008 — Рубрика: PHP
Метки: ,

Единое имя конструкторов

PHP5 позволяет определить метод-конструктор класса. Классы, имеющие конструктор, вызывают его для каждого создаваемого объекта. Обычно конструкторы используются для присваивания переменным-элементам класса начальных значений, необходимых до использования объекта.

В PHP4 конструктором явзяется метод, который называется так же, как сам класс. Так как часто необходимо вызывать конструктор базового класса из класса производного, такой принцип именования конструкторов затрудняет работу со сложной иерархией классов. Если базовый класс изменен, приходится также менять имя вызываемого конструктора базового класса в коде производного класса.

В PHP5 введен стандартный способ объявления конструктора класса. Конструктором в PHP5 является метод с именем __construct().

Пример:
class BaseClass {
function __construct() {
print "В конструкторе базового класса BaseClass\n";
}
}

class SubClass extends BaseClass {
function __construct() {
parent::__construct();
print "В конструкторе производного класса SubClass\n";
}
}

$obj = new BaseClass();
$obj = new SubClass();
?>

Для обратной совместимости, предусмотрено следующее: если PHP5 не находит функцию __construct() в определении данного класса, используется старый стиль именования конструкторов. Таким образом, единственный случай несовместимости при переходе на PHP5 - присутствие в объявлении класса метода с именем __construct().

Март 9, 2008 — Рубрика: PHP
Метки: ,

Клонирование объектов

В PHP4 отсутствовала возможность определить конструктор копии, который бы выполнялся при создании копии объекта. PHP4 осуществлял побайтовое копирование объекта, создавая точные копии всех его свойств.

Данное поведение PHP4 не всегда позволяло достичь нужного результата. Хорошим примером необходимости конструктора копии является объект, представляющий GTK-окно и содержащий его ресурсы: при создании копии такого объекта, вам, скорее всего, хотелось бы создать новое окно с теми же свойствами, и получить объект, содержащий ресурсы нового окна. Еще один пример: объект хранит ссылку на другой используемый им объект, и при создании копии хотелось бы получить ссылку на новый экземпляр объекта, а не на тот же.

Для создания копии объекта, вызывается его метод __clone():
$copy_of_object = $object->__clone();
?>

При выполнении данной операции, PHP5 сначала проверит, определен ли метод __clone(). Если он не определен, PHP вызовет метод __clone(), созданный под умолчанию, который осуществит побайтное копирование всех свойств объекта. В случае же, если метод __clone() определен, он отвечает за установку требуемых свойств создаваемой копии объекта. Для удобства, Zend Engine предоставляет функцию, импортирующую все свойства копируемого объекта, так что достаточно переопределить только те свойства, которые необходимо изменить.

Пример:
class MyCloneable {
static $id = 0;

function MyCloneable() {
$this->id = self::$id++;
}

function __clone() {
$this->name = $that->name;
$this->address = “New York”;
$this->id = self::$id++;
}
}

$obj = new MyCloneable();

$obj->name = “Hello”;
$obj->address = “Tel-Aviv”;

print $obj->id . “\n”;

$obj = $obj->__clone();

print $obj->id . “\n”;
print $obj->name . “\n”;
print $obj->address . “\n”;
?>

Март 7, 2008 — Рубрика: PHP
Метки: ,

Ключевое слово final

В PHP5 введено ключевое слово “final”, используемое для определения финальных элементов и методов класса. Элементы и методы, в объявлении которых указано ключевое слово “final”, нельзя переопределить в классе-потомке.

Пример:
class Foo {
final function bar() {
// ...
}
}
?>

Также возможно использовать ключевое слово “final” в определении самого класса, что запретит создание производных от него классов. При этом все элементы и методы такого класса автоматически являются финальными, и определять их таковыми явно нет необходимости.

Пример:
final class Foo {
// определение класса
}

// следующая строка вызовет ошибку времени выполнения
// class Bork extends Foo {}
?>

Свойства не могут быть финальными.

Существующие программы, не испольующие собственные классы или функции, названные “final”, будут работать без каких-либо изменений.

[fixxxer] Примечание: в PHP все методы класса являются виртуальными.

Март 3, 2008 — Рубрика: PHP
Метки: ,

Уточнение типа класса (Class Type Hints)

Оставаясь слабо типизированным языком, PHP5 предоставляет возможность использовать уточнения типа класса (class type hints) для указания ожидаемого класса объекта, передаваемого методу в качестве параметра.

Пример:
interface Foo {
function a(Foo $foo);
}

interface Bar {
function b(Bar $bar);
}

class FooBar implements Foo, Bar {
function a(Foo $foo) {
// ...
}

function b(Bar $bar) {
// ...
}
}

$a = new FooBar;
$b = new FooBar;

$a->a($b);
$a->b($b);
?>

Уточнения типов класса не проверяются не при компиляции, как в большинстве языков со строгой типизацией, а во время исполнения. Это означает, что следующие фрагменты кода эквивалентны:
function foo(ClassName $object) {
// ...
}
?>

function foo($object) {
if (!($object instanceof ClassName)) {
die("Argument 1 must be an instance of ClassName");
}
}
?>

Данный синтаксис применим только к объектам/классам, но не к встроенным типам данных.

Март 1, 2008 — Рубрика: PHP
Метки: ,

Абстрактные классы и методы

В PHP5 также введены абстрактные (abstract) классы и методы. Абстрактный метод представляет собой только объявление метода и не предусматривает его реализации. Класс, содержащий абстрактные методы, должен быть объявлен абстрактным.

Пример:
abstract class AbstractClass {
abstract public function test();
}

class ImplementedClass extends AbstractClass {
public function test() {
echo "Вызван метод ImplementedClass::test().\n";
}
}

$o = new ImplementedClass;
$o->test();
?>

Создание экземпляра абстрактного класса невозможно.

Существующие программы, не испольующие собственные классы или функции, названные “abstract”, будут работать без каких-либо изменений.

Февраль 29, 2008 — Рубрика: PHP
Метки: ,

Частные и защищенные методы

В PHP5 также введены частные (private) и защищенные (protected) методы.

Пример:
class Foo {
private function aPrivateMethod() {
echo "Вызван метод Foo::aPrivateMethod().\n";
}

protected function aProtectedMethod() {
echo "Вызван метод Foo::aProtectedMethod().\n";
$this->aPrivateMethod();
}
}

class Bar extends Foo {
public function aPublicMethod() {
echo “Вызван метод Bar::aPublicMethod().\n”;
$this->aProtectedMethod();
}
}

$o = new Bar;
$o->aPublicMethod();
?>

Существующие программы, не испольующие собственные классы или функции, названные “public”, “protected” или “private”, будут работать без каких-либо изменений.

Февраль 28, 2008 — Рубрика: PHP
Метки: ,

Частные и защищенные элементы класса

В PHP5 введены частные (private) и защищенные (protected) переменные-элементы класса (member variables), что позволяет определять область их видимости.

Пример:

Защищенные (protected) переменные-элементы класса доступны методам (methods) класса, в котором они объявлены, и методам производного от него класса. Частные (private) элементы класса доступны только методам класса, в котором они объявлены.
class MyClass {
private $Hello = "Hello, World!\n";
protected $Bar = "Hello, Foo!\n";
protected $Foo = "Hello, Bar!\n";

function printHello() {
print "MyClass::printHello() " . $this->Hello;
print “MyClass::printHello() ” . $this->Bar;
print “MyClass::printHello() ” . $this->Foo;
}
}

class MyClass2 extends MyClass {
protected $Foo;

function printHello() {
MyClass::printHello(); /* Выведет значение */
print “MyClass2::printHello() ” . $this->Hello; /* Ничего не выведет */
print “MyClass2::printHello() ” . $this->Bar; /* Не выведет значение (переменная не определена)*/
print “MyClass2::printHello() ” . $this->Foo; /* Выведет значение */
}
}

$obj = new MyClass(); print $obj->Hello; /* Ничего не выведет */
print $obj->Bar; /* Ничего не выведет */
print $obj->Foo; /* Ничего не выведет */
$obj->printHello(); /* Выведет значение */

$obj = new MyClass2();
print $obj->Hello; /* Ничего не выведет */
print $obj->Bar; /* Ничего не выведет */
print $obj->Foo; /* Ничего не выведет */
$obj->printHello();
?>

Февраль 24, 2008 — Рубрика: PHP
Метки: ,