Вызов close
и shutdown
имеет два различных эффекта на базовый сокет.
первая вещь указать состоит в том, что сокет является ресурсом в базовой ОС и , несколько процессов могут иметь дескриптор для того же базового сокета.
, Когда Вы звоните close
, это постепенно уменьшает количество дескриптора одним и если количество дескриптора достигло нуля тогда сокет и связалось, соединение проходит нормальную близкую процедуру (эффективно отправляющий FIN / EOF одноранговому узлу), и сокет освобожден.
вещь обратить внимание на вот состоит в том, что, если количество дескриптора не достигает нуля, потому что другой процесс все еще имеет дескриптор к сокету тогда, соединение не закрывается, и сокет не освобожден.
, С другой стороны, вызов shutdown
для чтения и записи завершений базовое соединение и отправляет FIN / EOF одноранговому узлу независимо от того, сколько процессов имеет дескрипторы к сокету. Однако это не делает , освобождают сокет, и все еще необходимо звонить близко позже.
Я не думаю, что вы можете, честно говоря, не простым способом. В любом случае, не лучше ли использовать служебные классы? В ООП нет ничего, посмотрите на это:
<?php
class HTMLUtil {
public static function filter($str) {...}
public static function entities($str) {...}
public static function encode($str) {...}
...etc...
}
?>
Классы Static Helper / Utility, которые объединяют связанные функциональные возможности, просто собрать вместе, просто объявите свои функции как static
:
Объявление членов или методов класса как static делает их доступными без требуется создание экземпляра класса.
Теперь вы можете использовать __ autoload
. Вам не нужно создавать экземпляры этих классов, чтобы использовать какие-либо из их статических функций, и это делает ваш код более читабельным (если немного более подробным). Мне всегда приятнее делать что-то вроде:
echo HTMLUtil::filter($str);
вместо:
echo filter($str); //scary filter function, where are you from?
При необходимости вы также можете объявить частный конструктор в своих служебных классах, чтобы предотвратить их создание, чтобы подчеркнуть, что их «всего лишь набор связанные функции ':
private __construct() {...}
Чтобы вызвать статическую функцию из другой функции в том же классе, вы должны сделать это с помощью ключевого слова self
(которое ссылается на тот же класс , а не ] объект или экземпляр класса ):
public static function foo()
{
echo self::bar() . '..and some foo';
}