| 
<?php
 /**
 * String
 * @desc Fluently designed String Class with common string operations
 * @example
 # formatting
 $str = new String("This is a test string");
 $str->replace(" ", "_")->camelCased();
 echo "\nCAMELCASED:      ";
 echo $str;
 echo "\nUNDERSCORED:     ";
 $str->underScored();
 echo $str;
 
 # inserting
 $str = new String("This is a test string");
 $str->indexOf("test")->insert("statement");
 
 echo "\nINSERTING:       ";
 echo $str;
 
 # cutting
 $str = new String("This is a test string");
 $str->cutBetween(4, 10, "...");
 
 echo "\nCUTTING:         ";
 echo $str;
 
 # appending
 $str = new String("This is a test string");
 $str->append("...");
 
 echo "\nAPPENDING:       ";
 echo $str;
 
 # prepending
 $str = new String("This is a test string");
 $str->prepend("-->");
 
 echo "\nPREPENDING:      ";
 echo $str;
 
 # padding
 $str = new String("This is a test string");
 $str->pad(40, "*");
 
 echo "\nPADDING BOTH:    ";
 echo $str;
 
 $str = new String("This is a test string");
 $str->padLeft(30, "_");
 
 echo "\nPADDING LEFT:    ";
 echo $str;
 
 $str = new String("This is a test string");
 $str->padRight(30, "_");
 
 echo "\nPADDING RIGHT:    ";
 echo $str;
 
 # combining
 $str = new String("This is a test string");
 $str->cutBetween(4, 10,"...")->padRight(30, "_");
 
 echo "\nCOMBINING:       ";
 echo $str;
 
 # combining
 $str = new String("This is a test string");
 $bStartsWith = $str->startsWith("This");
 
 echo "\nCHECKS:\n";
 echo "StartsWith       ";
 echo $bStartsWith;
 
 $str = new String("This is a test string");
 $bEndsWith = $str->endsWith("string");
 
 echo "\nEndsWith         ";
 echo $bEndsWith;
 
 echo "\nOTHERS\n";
 $str = new String();
 $str->concat(array("This","is","a","test","string"));
 
 echo "\nConcat           ";
 echo $str;
 
 $str = new String();
 $str->concat(array("This","is","a","test","string"),"_")->camelCased();
 
 echo "\nCombination      ";
 echo $str;
 
 * @author Thomas Schaefer
 */
 class String {
 
 private $error;
 private $length;
 private $string = "";
 private $array = array();
 private $index = 0;
 private $indexOf = false;
 
 public function __construct($string="") {
 $this->string = $string;
 $this->Length();
 }
 
 /**
 * concat
 * @desc concatenate array of strings
 * @param array $array
 * @param string $separator
 * @return void
 */
 public function concat($array, $separator=""){
 $this->string = implode($separator, $array);
 return $this;
 }
 
 /**
 * Length
 * @return int
 */
 private function Length(){
 $this->length = strlen($this->string);
 return $this;
 }
 
 /**
 * getLength
 * @return int
 */
 public function getLength(){
 return $this->length;
 }
 
 /**
 * toUpper
 * @return void
 */
 public function toUpper(){
 $this->string = strtoupper($this->string);
 return $this;
 }
 
 /**
 * toLower
 * @return void
 */
 public function toLower(){
 $this->string = strtolower($this->string);
 return $this;
 }
 
 /**
 * split
 * @desc split a string into parts
 * @param string $separator
 * @return void
 */
 public function split($separator){
 $this->array = explode($separator, $this->string);
 return $this;
 }
 
 /**
 * indexOf
 * @find first occurence position of a string part
 * @param string $find
 * @return void
 */
 public function indexOf($find){
 $this->indexOf = true;
 $this->index = strpos($this->string, $find);
 return $this;
 }
 
 /**
 * lastIndexOf
 * @desc find last occurence position of a string part
 * @param string $find
 * @return void
 */
 public function lastIndexOf($find){
 $this->indexOf = true;
 $this->index = strrpos($this->string, $find);
 return $this;
 }
 
 /**
 * padLeft
 * @param int $pad_length
 * @param string $pad_string
 * @return void
 */
 public function padLeft($pad_length, $pad_string="*"){
 $this->string = str_pad($this->string, $pad_length, $pad_string, STR_PAD_LEFT);
 return $this;
 }
 
 /**
 * padRight
 * @param int $pad_length
 * @param string $pad_string
 * @return void
 */
 public function padRight($pad_length, $pad_string="*"){
 $this->string = str_pad($this->string, $pad_length, $pad_string, STR_PAD_RIGHT);
 return $this;
 }
 
 /**
 * pad
 * @desc pad string left and right
 * @param int $pad_length
 * @param string $pad_string
 * @return void
 */
 public function pad($pad_length, $pad_string="*"){
 $this->string = str_pad($this->string, $pad_length, $pad_string, STR_PAD_BOTH);
 return $this;
 }
 
 /**
 * startsWith
 * @param string $search
 * @return bool
 */
 public function startsWith($search){
 return (substr($this->string,0, strlen($search))==$search?true:false);
 }
 
 /**
 * endsWith
 * @param string $search
 * @return bool
 */
 public function endsWith($search){
 return (substr($this->string,-(strlen($search)))==$search?true:false);
 }
 
 /**
 * cut
 * @param integer $from
 * @param integer $to optional
 */
 public function cut($from = 0, $to = null) {
 $this->string (String::cutting($this->string, $from, $to));
 return $this;
 }
 
 /**
 * cutBetween
 * @param integer $minLength
 * @param integer $maxStringLength
 * @param string $placeholder
 * @return void;
 */
 public function cutBetween($minLength = 8, $maxStringLength = 20, $placeHolder = "…") {
 $string = $this->string;
 if (strlen($string) > $maxStringLength and $minLength * 3 < strlen($string)) {
 $string = String::cutting($string, 0, $minLength) . $placeHolder . String::cutting($string, - $minLength);
 $this->string = $string;
 }
 return $this;
 }
 
 /**
 * cutting
 * @static
 * @param string $string
 * @param int $from
 * @param int $to
 * @return string
 */
 public static function cutting($string, $from, $to = null) {
 if ($to)
 return substr($string, $from, $to);
 return substr($string, $from);
 }
 
 /**
 * insert
 * @desc prepending indexOf needed
 * @param string $valueToInsert
 * @return void
 */
 public function insert($valueToInsert){
 if($this->indexOf){
 $this->string = substr($this->string, 0, $this->index) . $valueToInsert . substr($this->string, $this->index);
 } else {
 $this->error = new Exception("insert expects an index.");
 }
 return $this;
 }
 
 /**
 * append
 * @param string $string
 * @return void
 */
 public function append($string){
 $this->string .= $string;
 return $this;
 }
 
 /**
 * prepend
 * @param string $string
 * @return void
 */
 public function prepend($string){
 $this->string = $string . $this->string;
 return $this;
 }
 
 /**
 *
 * @param string $look search string
 * @param string $by replace string
 * @return void
 */
 public function replace($look, $by){
 $this->string = str_replace($look,$by, $this->string);
 return $this;
 }
 
 /**
 * trim
 * @return void
 */
 public function trim() {
 $this->string = trim($this->string);
 return $this;
 }
 
 /**
 * underScored
 * @param string $word
 * @return string
 */
 public function underScored() {
 $tmp = String::preplace($this->string, array (
 '/([A-Z]+)([A-Z][a-z])/' => '\\1_\\2',
 '/([a-z\d])([A-Z])/' => '\\1_\\2'
 ));
 $this->string = strtolower($tmp);
 return $this;
 }
 
 /**
 * camelCased
 * @param string $lower_case_and_underscored_word
 * @return string
 */
 public function camelCased() {
 $this->string = str_replace(" ", "", ucwords(str_replace("_", " ", $this->string)));
 return $this;
 }
 
 /**
 * helper method
 *
 * @param string $search
 * @param string $replacePairs
 * @return string
 */
 protected static function preplace($search, $replacePairs) {
 return preg_replace(array_keys($replacePairs), array_values($replacePairs), $search);
 }
 
 /**
 *
 * @return string
 */
 public function __toString(){
 if($this->error instanceof Exception){
 return $this->error;
 } elseif(count($this->array)){
 return $this->array;
 }
 return $this->string;
 }
 }
 
 |