Abstract Factory Pattern

<?php
interface AssetA_Base{
  function method();
}

interface AssetB_Base{
  function method();
}

interface AssetC_Base{
  function method();
}

class AssetAX implements AssetA_Base{
  function method(){}
}
class AssetBX implements AssetB_Base{
  function method(){}
}
class AssetCX implements AssetC_Base{
  function method(){}
}
class AssetAY implements AssetA_Base{
  function method(){}
}
class AssetBY implements AssetB_Base{
  function method(){}
}
class AssetCY implements AssetC_Base{
  function method(){}
}

interface FactoryBase{
  function create_asset_a($arg);
  function create_asset_b();
  function create_asset_c();
}

class FactoryX implements FactoryBase{
  function create_asset_a($arg){
    return new AssetAX;
  }
  function create_asset_b(){
    return new AssetBX;
  }
  function create_asset_c(){
    return new AssetCX;
  }
}

class FactoryY implements FactoryBase{
  function create_asset_a($arg){
    return new AssetAY;
  }
  function create_asset_b(){
    return new AssetBY;
  }
  function create_asset_c(){
    return new AssetCY;
  }
}

class FactoryZ implements FactoryBase{
  function create_asset_a($arg){
    return new AssetAY;
  }
  function create_asset_b(){
    return new AssetAY;
  }
  function create_asset_c(){
    return new AssetBX;
  }
}


echo "case of FactoryX<br />";
$factory_x = new FactoryX;
var_dump($factory_x->create_asset_a(123));
var_dump($factory_x->create_asset_b());
var_dump($factory_x->create_asset_c());

echo "<hr />";

echo "case of FactoryY<br />";
$factory_y = new FactoryY;
var_dump($factory_y->create_asset_a(456));
var_dump($factory_y->create_asset_b());
var_dump($factory_y->create_asset_c());

echo "<hr />";

echo "case of FactoryZ<br />";
$factory_z = new FactoryZ;
var_dump($factory_z->create_asset_a(456));
var_dump($factory_z->create_asset_b());
var_dump($factory_z->create_asset_c());

?>