Попробуйте это:
<?php
$html_classes = 'class1 class2 class3 ';
$parts = explode(" ", $html_classes);
$results = "";
foreach($parts as $c){
if($c != ""){
$results .= "." . $c;
}
}
echo $results;
?>
Результаты, которые я получил:
.class1.class2.class3
Надеюсь, что помогает.
Можно найти много информации об этом здесь.
Короче говоря PIA является interop блоком со знаком, который предоставляет "официальное" определение типов в библиотеке COM от издателя библиотеки COM.
Относительно преимуществ, отправленная статья суммирует его довольно хороший:
PIAs важны, потому что они обеспечивают уникальные идентификационные данные типа. PIA отличает официальные определения типа от поддельных определений, предоставленных другими interop блоками. Наличие единственных идентификационных данных типа гарантирует соответствие типов между приложениями, которые совместно используют типы, определенные в PIA. Поскольку PIA подписан его издателем и маркирован атрибутом PrimaryInteropAssembly, он может дифференцироваться от других interop блоков, которые определяют те же типы.
Основной interop блок перенесет COM-интерфейсы в.NET совместимые типы. Это не дает Вам детализированный контроль, который делает вручную вызов методов, но это достаточно близко.
Без PIA:
object _comObject;
Type _comObjectType;
_comObjectType = Type.GetTypeFromProgID("MyCompany.MyApplication.MyObject", true);
_comObject = Activator.CreateInstance(_comObjectType);
string name = (string)_comObjectType.InvokeMember("GetCustomerName", BindingFlags.InvokeMethod, null, _comObject, , new object [] { _customerId });
С PIA:
MyCompany.MyApplication.MyObject obj = new MyObject();
string name = obj.GetCustomerName(_customerId);