php ile bir dizi sınıf oluşturma

3 Cevap

i iki dizileri yani varsa

$text = 'i am passed :)';
$fn = array(
':)',
':-)',
';;)'
)

$rep = array(
'smily1',
'smily2',
'smily3'
            );

$output = str_replace($fn, $rep, $text);

echo $output;

i want to make a class for this to use in future where i will want... how can i make a class for it...

ve de nasıl ben bunun için bir fonksiyon yaratalım ...

3 Cevap

Temelde bir sınıf içinde işlevini sararak. Eğer daha gelişmiş işlevsellik arıyorsanız, size belirtmek gerekir.

<?php

class SmileyFilter {
  private $_keys;
  private $_values;

  function add($key, $value) {
     $this->_keys[] = $key;
     $this->_values[] = $value;
  }

  function add_all($pairs) {
    foreach ($pairs as $key => $value)
      $this->add($key, $value);
  }

  function replace($text) {
    return str_replace($this->_keys, $this->_values, $text);
  }
}

// usage

$s = new SmileyFilter();

$s->add(':)', 'smily1');
$s->add(':-)', 'smily2');
$s->add(';;)', 'smily3');

/* OR

$smileys = array(
  ':)'  => 'smily1',
  ':-)' => 'smily2',
  ';;)' => 'smily3');

$s->add_all($smileys);

*/


$s->replace('i am passed :)'); // "i am passed smily1"
?>
class SmileyReplacer
{
    protected static $_map = array(
        ':)'  => 'smiley1',
        ':-)' => 'smiley2',
        ';;)' => 'smiley3'
    );

    public static function replace($string)
    {
        return str_replace(array_keys(self::$_map), self::$_map, $string);
    }
}

// Usage
echo SmileyReplacer::replace('I am happy :)'); // I am happy smiley1

Ben bu örneği neden hiçbir sebep göremiyorum, bu yüzden bir bütün statik sınıf iyidir. Hiçbir gerçek devlet içinde var. Eğer dışarıdan haritayı beslemek istediğiniz durumda bir ortak dizi geçebileceği addMap(array $map) statik bir yöntem ekleyebilirsiniz.

Size aramalar hakkında endişeleriniz varsa array_keys çalıştırdığınız her zaman replace, kriter yok. Ben çok gerçekten performansı üzerinde bir etkisi olurdu böylece yeterli suratlar ile gelebilir şüpheliyim.

Smiley

class Smiley {
    private $name;
    private $data;

    public function getName() {
    return $this->name;
    }

    public function setName($name) {
    $this->name = $name;
    return $this;
    }

    public function getData() {
    return $this->data;
    }

    public function setData($data) {
    $this->data = $data;
    return $this;
    }
    function __construct($name = null, $data = null) {
    $this->name = $name;
    $this->data = $data;
    }

}

SmileyMapper

class SmileyMapper {
    private $smilies = array();

    public function addSmiley(Smiley $smiley) {
    $this->smilies[] = $smiley;
    return $this;
    }
    public function replaceSmileys($str) {
    return str_replace(
        array_map(
            create_function(
            'Smiley $item',
            'return $item->getData();'
            ),
            $this->smilies),
        array_map(
            create_function(
            'Smiley $item',
            'return $item->getName();'
            ),
            $this->smilies),
        $str
    );
    }
}

Example

$text = 'i am passed :)';
$fn = array(
    ':)',
    ':-)',
    ';;)'
);

$rep = array(
    'smily1',
    'smily2',
    'smily3'
);

$sm = new SmileyMapper();
foreach ($fn as $k => $v) {
    $sm->addSmiley(new Smiley($rep[$k],$v));
}
echo $sm->replaceSmileys($text);